Firebase auth.user API的云函数具有空的displayName属性

Firebase auth.user API的云函数具有空的displayName属性,firebase,firebase-authentication,google-cloud-functions,Firebase,Firebase Authentication,Google Cloud Functions,我有一个使用Firebase的Android应用程序,带有数据库、身份验证和云功能模块。当用户通过应用程序创建配置文件并设置用户全名时 与预期的差不多-无论用户输入什么 我还有一个云函数,它为新用户创建一个数据库记录: 常量函数=需要“firebase-functions”; const admin=需要“firebase-admin”; admin.initializeAppfunctions.config.firebase; exports.createUserRecord=functio

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

与预期的差不多-无论用户输入什么

我还有一个云函数,它为新用户创建一个数据库记录:

常量函数=需要“firebase-functions”; const admin=需要“firebase-admin”; admin.initializeAppfunctions.config.firebase; exports.createUserRecord=functions.auth.user.onCreatefunctionevent{ const user=event.data; const userName=user.displayName | |“匿名”; const userSignedUp=new Date.toJSON; console.log'A new user signed up:',user.uid,userName,userSignedUp; 返回admin.database.ref'users.push{ 名称:`${userName}`, 电子邮件:`${user.email}`, ref:`${user.uid}`, 注册:`${userSignedUp}` }; }; 除了日志条目和数据库列表中的结果记录都作为名称值匿名外,这基本上可以正常工作

谁能告诉我这件事哪里出了问题?谢谢

致以最良好的祝愿

~z~托多

更新:


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

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

此时,云函数只提供了一个您正在使用的函数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);
  });

对我来说,一切看起来都很正常。我在Firebase中发现了Google登录的问题[0]。也许是你的?你用谷歌创建用户吗?[0]在Android上,当我使用电子邮件/密码创建用户时,displayName为空。你希望它被定义吗?来源是什么?我正在使用Android Firebase UI登录并在我的应用程序中注册-当我在第一次登录时创建帐户时,有一个用于完整用户名的文本框。价值来自那里。Firebase Auth保存登录名的位置正确保存了该名称,这一点可以通过生成欢迎返回的应用程序代码得到证明!在以后每次登录时敬酒。。。只有云函数看不到此属性:-
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);
  });