我有一个使用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
中的结果记录作为名称值之外,这个工作大部分没问题。
有人可以告诉我这里哪里出错吗?感谢。
致以最诚挚的问候,
〜托多尔
更新:
忘记提及,用户是使用电子邮件/密码提供商创建的。
答案 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