当前位置: 首页 > 知识库问答 >
问题:

如何从 Firebase 获取 displayName?

经佐
2023-03-14

我一直无法从Firebase中获取显示名称。下面是注册过程编码

 const promise = auth.createUserWithEmailAndPassword(email, pass)
 .then(
    (user)=>{
   // here you can use either the returned user object or       
 firebase.auth().currentUser. I will use the returned user object
      if(user){
        user.updateProfile({
           displayName: textUsername.val(),
        //    photoURL: // some photo url
        })
      }
  })
  .then( function() {
      console.log('User Name Set!')
  })
  .catch(function() {
    console.log('error')
  });
 promise.catch(e => console.log(e.message));

 })

 firebase.auth().onAuthStateChanged(firebaseUser => {
  if(firebaseUser) {
      console.log(firebaseUser)
  } else {
    console.log('not logged in');
  }
 })

控制台.log显示“用户名集!”,控制台.log(firebaseUser)显示显示名称是在当前用户的数据库中设置的,并且名称是我期望的。然而

console.log(firebase.auth().currentUser) 

给出null,并且

if (user != null) {
    console.log(user.displayName);
}

这也返回为null。

我一直在寻找获取firebase数据集数据的方法,但我无法做到这一点。

如果有人能给我一些建议,那就太好了。

非常感谢。

共有2个答案

胡彭亮
2023-03-14

我最终用递归来解决这个问题。我希望有更优雅的方式,但这是唯一适合我的方式。如果您用不同的解决方案解决了这个问题,请分享!

我需要这个来创建新用户。当有人登录时,它似乎永远不会返回 null。

setTimeout()将递归速度降低了0.5秒,这样您就不会因为多次调用该函数而出错。您可以通过调整毫秒来加速或减慢它。

工作代码

auth.onAuthStateChanged(user => {
    if (user) {
      // Everything inside here happens if user is signed in
      console.log(user)

      // Greet the user with a message and make it personal by using their display name
     injectDisplayName = () => {
          if(firebase.auth().currentUser.displayName === null){
              console.log('happens');
              setTimeout(() => {
                injectDisplayName()
            }, 500)
          } else {
              document.getElementById('display-name-header').textContent = `Hello, ${firebase.auth().currentUser.displayName}`
          } 
      }
      injectDisplayName()

    } else {
      // Everything inside here happens if user is not signed in
    }
  })
禄星腾
2023-03-14

< code > firebase . auth()current user . display name 返回OAuth提供程序的显示名称。但是,< code>firebase.auth()。currentUser异步解析,在页面加载时暂时为空。如果将< code > console . log(firebase . auth(). current user . display name)放在< code >中。onAuthStateChanged你会看到的。

 类似资料:
  • 我想获取日期字段,但下面的代码没有这样做。Toast显示null(字符串日期的值)。 公共字符串日期;

  • 问题内容: 我正在尝试获取Firebase存储桶中文件的“长期持久下载链接”。我已将其权限更改为 我的javacode看起来像这样: 当我运行它时,我得到的uri链接看起来像 com.google.android.gms.tasks.zzh@xxx 问题1.我是否可以从中获得类似于以下内容的下载链接:https : //firebasestorage.googleapis.com/v0/b/pro

  • 我想在Android Studio中获取isSeen节点的值。M6F2mJjQ8uGPXAynZzV是消息的id,并将消息更改为消息。我想在适配器类中获得这个值。

  • 我在实时数据库中有以下数据: 实时数据库 我想获得 当我用这个的时候 错误: E/flutter(27654):[ERROR: flutter/lib/ui/ui_dart_state.cc(166)]未处理的异常:类型_InternalLinkedHashMap 我的范例: 我的问卷模型:

  • 我想从FireBase的方法获取下载Url。如何使用以下代码获取下载Url? 我使用了,但这不起作用。

  • 这是我第一次使用FCM。 我从Firebase/QuickStart-Android下载了一个示例,并安装了FCM QuickStart。但我无法从日志中获得任何令牌,甚至在应用程序中点击日志令牌按钮。 然后我尝试用Firebase控制台发送消息,并设置为目标我的应用程序包名称。我收到短信了。 完成以上操作后,您将在logcat中获得令牌。但最后,我找到了一个方便的方法来获取它,只需使用debug