Пользователь Firebase displayName равен нулю - PullRequest
0 голосов
/ 17 мая 2018

Я использую этот код в своем приложении реакции:

  componentDidMount() {
    modelInstance.addObserver(this);
    modelInstance.getSignInStatus().then((user)=>{
      this.setState({
        userName: user !== false ? user.displayName : "Sign in",
        logged_in: user !== false ? true : false

      });
    });
  }

А вот modelInstance.getSignInStatus ():

  this.getSignInStatus = function () {
    return new Promise((resolve, reject)=>{
      firebase.auth().onAuthStateChanged(function(user){
        if (user){
          resolve(user);
        }
        else {
          resolve(false);
        }
      });
    });
  }

В результате получается, что this.state.userName имеет значение null, что означает, что user.displayName равно null. Почему это?

Ответы [ 2 ]

0 голосов
/ 21 мая 2018

Я бы использовал setState для проверки статуса авторизации следующим образом:

firebase.auth().onAuthStateChanged(function(user){
    if (user){
      this.setState({user});
    }
}

Тогда вы хотите состояние displayName текущего пользователя

componentDidMount() {
 modelInstance.addObserver(this);
 modelInstance.getSignInStatus().then((user)=>{
   this.setState({
     userName: this.state.user ? this.state.user.displayName : "Sign in",
     logged_in: this.state.user ? true : false
   });
 });
}

Очевидно, что должно бытьимя в свойстве displayName, в противном случае вам придется обновить его.Дайте мне знать, как это получается.

0 голосов
/ 17 мая 2018
  state = {
    username: "",
    email: "",
    passwordOne: "",
    passwordTwo: "",
    error: null
  }; 

  onSubmit = event => {
    const {username, email, passwordOne} = this.state;
    const {history} = this.props;

    auth
      .createUserWithEmailAndPassword(email, password);
      .then(authUser => {
        db.doCreateUser(authUser.uid, username, email).then(() => {
          //you should clear your state fields here, for username / email etc
          console.log(authUser);
          //redirect user
          history.push(routes.HOME);
        });
      })
      .catch(error => {
        this.setState({error});
      });
    event.preventDefault();
  };

const auth = firebase.auth();

const db = firebase.database(); для доступа к doCreateUser

const doCreateUser = (id, username, email) =>
  db.ref(`users/${id}`).set({
    uid:id,
    username,
    email,
  });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...