我正在尝试编写一个函数,该函数将在用户创建时发送一封欢迎电子邮件。我继续学习了本教程,它说可以用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时,我得到了错误Error: Functions did not deploy properly.
(有用,ikr(,我想这与onOperation
函数是private
有关(如果我错了,请纠正我(。
有什么办法做我想做的事吗?如果是,如何?或者,有没有办法在createUserWithEmailAndPassword
上设置displayName
,这样我就可以继续使用onCreate
功能?
这是我当前的onCreate
代码:
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 Auth配置文件的云函数触发器。只有onCreate和onDelete。
请参阅:当用户更新他们的电子邮件时,Firebase auth onUpdate云功能
在使用电子邮件/密码身份验证创建帐户期间,目前无法设置用户的displayName属性。创建帐户后,需要再次调用以更新配置文件。
请参阅:如何设置Firebase用户的displayName?
基本上,你必须克服这些限制。请随时联系Firebase支持人员,以提交功能请求,使其更轻松。
如果我在哪里,我不会对用户的配置文件使用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
}
希望能有所帮助:(