我正在为我的后端创建一个带有Firebase的React Native应用程序。Firebase身份验证用于创建用户,无论何时创建用户,我都会将自定义用户数据存储在实时数据库中。为此,我使用了一个Firebase云函数(Javascript(:
exports.createCustomUser = functions.auth.user().onCreate((user) => {
const email = user.email;
const userId = user.uid;
const body = {
// The default values for a user
userId,
username: "",
nickname: "",
activityDuration: "2",
isPumping: false,
email: email,
position: "",
};
return admin.database().ref(`/users/${userId}`).set(body);
});
如果我理解正确的话,onCreate()
方法似乎是在创建auth用户之后发生的,而不是同时发生的。有没有一种方法可以在Auth用户的同时创建自定义用户?
如果这不可能:我的问题发生在用户注册之后。创建身份验证用户(和令牌(后,该用户将重定向到我的主屏幕,在那里我将返回JSX,其中包括来自自定义用户的某些信息,如:<Text>{customUser.activityDuration}</Text>
。问题是,在onCreate方法完成所需的几分钟内,customUser
就是null
,对activityDuration的调用返回一个错误。
解决这个问题的最佳实践是什么?
你是对的-云函数总是在触发它们的事件发生后运行。此行为无法更改。只有当你的功能成功时,你才能成功创建用户。
相反,您可以在数据库中预期在函数完成后编写的位置设置一个数据库侦听器。您的代码应该具有新创建的用户的UID,您可以使用它来构建要查询的位置,该位置应该在函数完成后填充。当数据首次可用时,您的侦听器将触发,您的应用程序可以从那里继续。
这与我在文章中关于将工作卸载到云函数的建议非常相似,只是我的示例使用了Firestore。