我正在尝试编写一个函数,该函数将在用户创建时发送欢迎电子邮件。我遵循了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
答案 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
}
希望有帮助:)