Javascript Firebase云函数-空user.displayName onCreate

Javascript Firebase云函数-空user.displayName onCreate,javascript,firebase,firebase-authentication,google-cloud-functions,Javascript,Firebase,Firebase Authentication,Google Cloud Functions,我试图写一个函数,将发送一个欢迎用户创建电子邮件。我接着学习了教程,其中说可以使用user.displayName访问新创建的用户的displayName,尽管它一直为我返回null。我意识到发生这种情况的可能原因(如果我在这里错了,请纠正我)是注册和设置用户的displayName在客户端分两步进行,因此当触发onCreate时,user.displayName自然为空。以下是我的客户端代码,供参考: fb.auth().createUserWithEmailAndPassword(paylo

我试图写一个函数,将发送一个欢迎用户创建电子邮件。我接着学习了教程,其中说可以使用
user.displayName
访问新创建的用户的
displayName
,尽管它一直为我返回
null
。我意识到发生这种情况的可能原因(如果我在这里错了,请纠正我)是注册和设置用户的displayName在客户端分两步进行,因此当触发
onCreate
时,
user.displayName
自然为空。以下是我的客户端代码,供参考:

fb.auth().createUserWithEmailAndPassword(payload.email, payload.password).then(user => {
  return user.user.updateProfile({ displayName: payload.name, });
}).catch(/* ... */);
我要找的是一个在
user.updateProfile
上触发的云函数。我已经研究了
auth.user().onOperation
函数(找到),但是当我尝试将此函数部署到firebase时,我得到了错误
错误:函数没有正确部署。
(有用,ikr),我想这与
onOperation
函数是
私有的有关(如果我错了,请纠正我)

有什么办法可以做我想做的事吗?如果是,怎么做?或者,是否有方法在
createUserWithEmailAndPassword
上设置
displayName
,以便我可以继续使用
onCreate
功能

以下是我当前的
onCreate
code:

exports.sendWelcomeEmail = functions.auth.user().onCreate(user => {
  console.log('name:', user.displayName);
});
下面是我尝试的
onOperation
功能:

exports.sendWelcomeEmail = functions.auth.user().onOperation(user => {
  console.log('user:', user);
}, 'updateProfile');

目前没有用于更新Firebase身份验证配置文件的云函数触发器。只有onCreate和onDelete

见:

当前无法在使用电子邮件/密码身份验证创建帐户期间设置用户的displayName属性。创建帐户后,需要第二次调用来更新配置文件

见:


基本上,您必须克服这些限制。请随意简化此操作。

如果我在您所在的位置,我不会在用户配置文件中使用firebase auth。使用
用户的集合可能是一个更好的主意,在那里您可以访问更新触发器

通常,我要做的是在有新的auth user时使用触发器,在
users
集合中创建一个用户。有了这种设计,你可以在每次有人更新它的个人资料时触发它

exports.onCreateAuthUser = functions.auth.user().onCreate(user => {
  firestore.collection('users').doc(user.uid).set({
     displayName: user.displayName,
     email: user.email,
     // any other properties 
  })

  //do other stuff
});

exports.onUpdateUser = functions
  .firestore.document('users/{id}')
  .onUpdate((change, context) => {
     // do stuff when user's profile gets updated
}
希望有帮助:)