【问题标题】:Firebase UI is displaying null for displayName under the user objectFirebase UI 在用户对象下为 displayName 显示 null
【发布时间】:2018-11-04 00:35:06
【问题描述】:

我正在使用 Firebase UI Web 来允许用户注册我的 Firebase 项目。然后我使用云函数(在 Node.js 中):

exports.newUserUpdate = functions.auth.user().onCreate(user => {})

然后向新创建的用户发送一封电子邮件。当我在user.displayName 或console.log 中读取user 对象时,它会将displayName 显示为空。这看起来好像displayName 没有在注册时提交。

我正在使用 Firebase UI Web 3.4.1。

谢谢。

【问题讨论】:

    标签: node.js firebase firebase-authentication google-cloud-functions


    【解决方案1】:

    这是一个已知问题: https://github.com/firebase/firebase-functions/issues/95

    创建用户时,依次调用以下API:

    • auth.createUserWithEmailAndPassword 创建邮箱/密码用户。
    • user.updateProfile 设置用户的显示名称

    onCreate 事件在第一次调用时触发,此时显示名称未知。

    【讨论】:

    • 我确认。您可以在 onCreate 函数中获取用户数据:admin.auth().getUser(userRecord.uid); 我不知道这是否是一个好的解决方案,也不知道是否会始终填充用户数据(取决于 user.updateProfile 是否在 admin.auth().getUser(userRecord.uid); 之前调用)但它在我的情况下工作
    【解决方案2】:

    Documentation 说,

    设置身份验证状态观察者并获取用户数据

    对于需要登录用户信息的每个应用页面, 将观察者附加到全局身份验证对象。这个观察者 每当用户的登录状态发生变化时都会被调用。

    使用 onAuthStateChanged 方法附加观察者。当一个用户 登录成功,您可以在 观察者。

    firebase.auth().onAuthStateChanged(function(user) {
      if (user) {
        // User is signed in.
        var displayName = user.displayName;
        var email = user.email;
        var emailVerified = user.emailVerified;
        var photoURL = user.photoURL;
        var isAnonymous = user.isAnonymous;
        var uid = user.uid;
        var providerData = user.providerData;
        // ...
      } else {
        // User is signed out.
        // ...
      }
    });
    

    【讨论】:

    • 是的,尽管这无关紧要。我在问为什么 displayName 在使用 FirebaseUI Web 注册时不会推送到用户对象。当我使用它时,user.displayName 为空。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-23
    • 2019-11-02
    • 1970-01-01
    • 2022-01-16
    • 2011-04-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多