Firebase Cloud Function - null user.displayName onCreate



我正在尝试编写一个函数,该函数将在用户创建时发送一封欢迎电子邮件。我继续学习了本教程,它说可以用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
}

希望能有所帮助:(

相关内容

  • 没有找到相关文章

最新更新