我正在使用Firebase为后端创建一个React Native应用程序。 Firebase身份验证用于创建用户,每当创建用户时,我还将自定义用户数据存储在Realtime数据库中。为此,我正在使用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的调用返回错误。
解决此问题的最佳实践是什么?
答案 0 :(得分:1)
您是正确的-Cloud Functions始终在发生触发它们的事件后运行。此行为无法更改。仅当您的功能成功后,才能使用户的创建成功。
您可以做的是在功能完成后将要写入的数据库位置处设置一个数据库侦听器。您的代码应具有新创建的用户的UID,并且您可以使用该代码来构建要查询的位置,该位置应在函数完成后填充。数据首次可用时,您的监听器将触发,您的应用程序可以从那里继续。
除了我的示例使用Firestore之外,这与我在关于offloading work to Cloud Functions的文章中推荐的内容非常相似。