displayName не доступно через currentUser в auth.onAuthStateChanged - Firebase - PullRequest
0 голосов
/ 03 марта 2020

После создания нового пользователя с auth.createUserWithEmailAndPassword и обновления профиля, слушатель аутентификации firebase (onAuthStateChanged) показывает displayName в объекте пользователя, но он недоступен. Загрузка скриншотов этого поведения, а также кода.

null - displayName displayName можно увидеть на расширяющемся объекте

  export var signup = userData => {
    return async dispatch => {
    try {
    var { username, email, password } = userData;
    var createdUser = await auth.createUserWithEmailAndPassword(
      email,
      password
    );
    //updating auth profile
    await createdUser.user.updateProfile({
      displayName: username,
      email: email
    });
    //storing user info in firestore
    var userObj = {
      username: username,
      email: email,
      joinedAt: serverTimestamp()
    };
    await firestore
      .collection("users")
      .doc(`${createdUser.user.uid}`)
      .set(userObj);
    //setting up auth state
    dispatch(
      setCurrentUser({
        username: username,
        uid: createdUser.user.uid
      })
    );
      } catch (error) {
       console.log(error.meesage)
      }
    };
  };

  componentDidMount =  () => {
     auth.onAuthStateChanged((user) => {
      if(user){
        console.log(user)
        console.log(user.uid)
        console.log(user.displayName);
        console.log(user.email)
      }
    })
   };

1 Ответ

1 голос
/ 03 марта 2020

Слушатель состояния авторизации будет запускаться сразу после создания пользователя при вызове createUserWithEmailAndPassword(). В этот момент у пользователя не будет свойства displayName. Только после того, как вы позвоните updateProfile(), учетная запись будет иметь displayName. Однако вызов updateProfile() не вызовет прослушиватель состояния auth снова. Вместо этого вам следует вести собственную запись в памяти или в какой-либо базе данных имени, которое вы добавили с помощью updateProfile(), и использовать это значение позже.

Пользовательский объект, доставленный слушателю состояния auth, не увидит новое значение displayName до тех пор, пока пользователь не выйдет и не вернется снова.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...