我正在使用 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 用户之后发生,而不是同时发生。有没有办法同时创建自定义用户和身份验证用户?
如果这不可能:我的问题在用户注册后立即发生。创建身份验证用户(和 token )后,用户将被重定向到我的主屏幕,我在其中返回包含来自自定义用户的某些信息的 JSX,如下所示: <Text>{customUser.activityDuration}</Text>
。问题是 onCreate 方法需要几分钟才能完成,customUser
是 null
,并且对 ActivityDuration 的调用返回错误。
解决这个问题的最佳实践是什么?
最佳答案
您是对的 - Cloud Functions 始终在触发它们的事件发生后运行。这种行为无法改变。仅当您的函数成功时,您才能创建用户成功。
您可以做的是在数据库中预计在函数完成后写入的位置设置一个数据库监听器。您的代码应该具有新创建用户的 UID,您可以使用它来构建要在函数完成后填充的查询位置。当数据首次可用时,您的监听器将触发,您的应用程序可以从那里继续。
这与我在关于 offloading work to Cloud Functions 的文章中推荐的内容非常相似,但我的示例使用 Firestore。
关于javascript - Firebase auth onCreate 将自定义用户数据添加到实时数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61261454/