【问题标题】:firebase cloud function authentication: onCreate event doesn't contain displayNamefirebase 云功能认证:onCreate 事件不包含 displayName
【发布时间】:2018-01-22 04:50:30
【问题描述】:

我有一个用于 onCreate 的云函数,看起来像

exports.addNewUserToCollection = functions.auth.user().onCreate(event => {
    const user = event.data; // The Firebase user.

    var userData = JSON.parse(JSON.stringify(user));
    if (!userData.displayName){
        userData.displayName = '(no name)'
    }

    return db
        .collection("users")
        .doc(user.uid)
        .set(userData);
});

除非用户通过电子邮件注册,否则它工作正常。
当用户通过电子邮件注册时,系统会提示他们输入名字和姓氏,并且此信息会包含在身份验证数据中。
我知道这一点是因为在他们的会话中我可以调用 getCurrentUser() 并检索他们的 displayName 属性。

然而,上面代码中的事件数据不包含 displayName(或名字和姓氏)

什么给了?

【问题讨论】:

    标签: javascript firebase firebase-authentication google-cloud-functions


    【解决方案1】:

    在 Firebase 身份验证中创建电子邮件+密码帐户时,您只需指定最少的信息:电子邮件和密码。例如在 iOS 上是:

    Auth.auth().createUser(withEmail: email, password: password) { (user, error) in
      // ...
    }
    

    您的云功能会通过以下精确信息触发:只有电子邮件和密码。

    虽然可以稍后更新用户配置文件以包含显示名称,但该信息不会传递到 Cloud Function 触发器(目前仅在创建帐户时触发)。

    可能的解决方法是:

    • 当您更新用户配置文件以设置显示名称时,从您的代码调用云函数。
    • 将整个用户创建过程交给 Cloud Functions,将电子邮件+密码+显示名称传递给您的自定义函数,然后创建用户帐户、设置其显示名称并为该用户创建文档。

    【讨论】:

    • 我明白了。我正在使用构建在 firebaseui-web 之上的 firebaseui-web-react,我想它正在为我更新 displayName 的魔力。谢谢你的回答
    猜你喜欢
    • 2018-11-17
    • 2020-03-03
    • 2019-11-08
    • 1970-01-01
    • 2020-05-18
    • 2022-01-09
    • 2021-04-19
    • 1970-01-01
    • 2021-05-07
    相关资源
    最近更新 更多