Firebase的云功能auth.user API具有空的displayName属性

时间:2017-06-20 06:26:00

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

我有一个使用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中的结果记录作为名称值之外,这个工作大部分没问题。

有人可以告诉我这里哪里出错吗?感谢。

致以最诚挚的问候,

〜托多尔

更新

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

1 个答案:

答案 0 :(得分:8)

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

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

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

UserId