我有一个使用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
为名称值。
谁能告诉我我哪里出了问题?谢谢。
此致敬意
~托铎
更新:
忘了提,用户是使用电子邮件/密码提供程序创建的。
在FirebaseUI中,通过电子邮件/密码创建用户分两步完成:使用地址和密码创建用户,然后使用输入的用户名更新用户配置文件。 这可以在FirebaseUI RegisterEmailFragment中看到。
目前,云函数仅提供用户创建的触发器,即您正在使用的触发器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);
});