javascript - 无法通过 auth.onAuthStateChanged 中的 currentUser 访问 displayName - Firebase

标签 javascript reactjs firebase firebase-authentication

使用 auth.createUserWithEmailAndPassword 创建新用户并更新配置文件后,firebase 身份验证监听器 (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() 添加的名称的记录,并在以后使用该值。

传递到身份验证状态监听器的用户对象将不会看到 displayName 的新值,直到用户注销并再次重新登录。

关于javascript - 无法通过 auth.onAuthStateChanged 中的 currentUser 访问 displayName - Firebase,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60497215/

相关文章:

javascript - Google SteppedArea 图表 - 自定义工具提示两个动画数据集

javascript - React HTMLAudioElement 不会暂停

javascript - 如果 Hook 依赖于已处理的数据,如何在顶层调用 Hook

android - 如果我启动 Firebase 跟踪并且永远不会停止它?它会在 Android 上引起问题吗?

javascript - 如何在 Titanium 中插入垂直滚动条

javascript - div float 在旋转木马顶部的问题

javascript - Sequelize findOne错误: TypeError indexOf undefined

javascript - 具有多个嵌套元素的按钮未在reactjs中返回正确的目标

android - 如何在 android 中有两个用于调试和生产的 Firebase (Firestore) 数据库?

firebase - 在 Firebase 客户端应用程序中实现可调用的云函数