【问题标题】:Cloud Functions for Firebase auth.user API has empty displayName propertyCloud Functions for Firebase auth.user API 的 displayName 属性为空
【发布时间】:2017-06-20 06:26:00
【问题描述】:

我有一个使用带有数据库、身份验证和云功能模块的 Firebase 的 Android 应用。当用户通过应用创建个人资料并设置用户全名时,

FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
if (user != null) {
    // user signed in
    String displayName = user.getDisplayName();
    // do whatever with displayName...
} else {
    // ....
}

几乎符合预期 - 无论用户输入什么。

我还有一个云功能,可以为新用户创建数据库记录:

const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp(functions.config().firebase);

exports.createUserRecord = functions.auth.user().onCreate(function(event) {
    const user = event.data;
    const userName = user.displayName || 'Anonymous';
    const userSignedUp = (new Date()).toJSON();
    console.log('A new user signed up: ', user.uid, userName, userSignedUp);
    return admin.database().ref('users').push({
        name: `${userName}`,
        email: `${user.email}`,
        ref: `${user.uid}`,
        signup: `${userSignedUp}`
    });
});

除了日志条目和数据库中的结果记录都将Anonymous 作为名称值之外,这几乎可以正常工作。

谁能告诉我我哪里出了问题?谢谢。

最好的问候,

~托多尔

更新

忘了提一下,用户是使用电子邮件/密码提供商创建的。

【问题讨论】:

  • 对我来说一切正常。我在 Firebase 中的 Google 登录中发现了该问题 [0]。也许它是你的?您是否使用 Google 创建用户? [0] github.com/firebase/quickstart-js/issues/19
  • 在 Android 上,当我使用电子邮件/密码创建用户时,displayName 为空。你期待它被定义吗?来源是什么?
  • 我正在使用 Android Firebase UI 登录并在我的应用中注册 - 当我在第一次登录时创建帐户时,完整的用户名有一个 TextBox .价值来自那里。此名称已正确保存在 Firebase Auth 保存登录名的任何位置,正如应用程序代码所证明的那样,在每次后续登录时都会生成 “Welcome back, !” Toast...看不到此属性的 Cloud 函数 :-(

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


【解决方案1】:

在 FirebaseUI 中,通过电子邮件/密码创建用户分两步完成:使用地址和密码创建用户,然后使用输入的用户名更新用户配置文件。这可以在 FirebaseUI RegisterEmailFragment 中看到。

目前,Cloud Functions 仅提供trigger for user creation,即您正在使用的functions.auth.user().onCreate()。用户配置文件更新没有触发器。创建用户时触发您的触发器。事件数据包含当时存在的用户配置文件,在使用用户名更新之前。

您将需要使用其他方法来获取用户名。一种选择是使用数据库事件来触发一个函数,该函数将在配置文件更新后retrieve the user data

admin.auth().getUser(uid)
  .then(function(userRecord) {
    // See the UserRecord reference doc for the contents of userRecord.
    console.log("Successfully fetched user data:", userRecord.toJSON());
  })
  .catch(function(error) {
    console.log("Error fetching user data:", error);
  });

【讨论】:

    猜你喜欢
    • 2017-09-07
    • 2018-01-03
    • 2022-12-01
    • 2018-04-19
    • 2017-08-26
    • 2017-09-17
    • 2017-08-08
    • 1970-01-01
    • 2017-08-07
    相关资源
    最近更新 更多