使用auth.createUserWithEmailAndPassword创建新用户并更新配置文件后,firebase auth侦听器(onAuthStateChanged)在用户对象中显示displayName,但无法访问。
上载此行为的屏幕截图以及代码。

null - displayName
displayName can be seen on expanding object

  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)
      }
    })
   };

最佳答案

调用createUserWithEmailAndPassword()后,创建用户后,身份验证状态侦听器将立即触发。届时,用户将没有displayName属性。直到您调用updateProfile()后,该帐户才会具有displayName。但是,对updateProfile()的调用不会再次触发身份验证状态侦听器。相反,您应该在内存中或某些数据库中维护自己用updateProfile()添加的名称的记录,并在以后使用该值。

传递给auth状态侦听器的用户对象将看不到displayName的新值,直到用户注销并再次登录。

09-25 19:10