Firebase云功能-空user.displayName onCreate

时间:2020-02-28 06:52:15

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

我正在尝试编写一个函数,该函数将在用户创建时发送欢迎电子邮件。我遵循了this教程,该教程说,尽管它不断为我返回displayName,但可以用user.displayName访问新创建的用户的null。我意识到发生这种情况的可能原因(如果我在这里错了,请纠正我)是因为注册和设置用户的displayName发生在客户端的两个单独步骤中,因此在触发onCreate时,{{1} }自然会为null。这是我的客户端代码,仅供参考:

user.displayName

我正在寻找的是在fb.auth().createUserWithEmailAndPassword(payload.email, payload.password).then(user => { return user.user.updateProfile({ displayName: payload.name, }); }).catch(/* ... */); 上触发的云函数。我已经研究了user.updateProfile函数(找到了here),但是当我尝试将此函数部署到Firebase时,出现了错误auth.user().onOperation(有用,ikr),我猜与Error: Functions did not deploy properly.函数与onOperation有关(如果我错了,请纠正我)。

有什么办法可以做我想做的事吗?如果是这样,怎么办?或者,是否可以在private上设置displayName,以便我可以继续使用createUserWithEmailAndPassword函数?

这是我当前的onCreate代码:

onCreate

这是我对exports.sendWelcomeEmail = functions.auth.user().onCreate(user => { console.log('name:', user.displayName); }); 函数的尝试:

onOperation

2 个答案:

答案 0 :(得分:2)

当前没有用于更新Firebase身份验证配置文件的Cloud Functions触发器。只有onCreate和onDelete。

请参阅:Firebase auth onUpdate cloud function for when a user updates their email

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

请参阅:How do I set the displayName of Firebase user?

基本上,您将必须解决这些限制。随时使用contact Firebase support to file a feature request简化操作。

答案 1 :(得分:2)

如果我在哪里,我将不使用firebase auth作为用户的个人资料。最好使用users的集合,您可以在其中访问更新触发器。

通常,我要做的是在有新的auth用户时触发一个触发器,在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
}

希望有帮助:)