Javascript Firebase auth onCreate将自定义用户数据添加到实时数据库

Javascript Firebase auth onCreate将自定义用户数据添加到实时数据库,javascript,firebase,firebase-realtime-database,firebase-authentication,google-cloud-functions,Javascript,Firebase,Firebase Realtime Database,Firebase Authentication,Google Cloud Functions,我正在使用Firebase为我的后端创建React本机应用程序。Firebase身份验证用于用户创建,无论何时创建用户,我都会将自定义用户数据存储在实时数据库中。为此,我使用Firebase云函数(Javascript): 如果我理解正确,那么onCreate()方法似乎是在创建auth用户之后发生的,而不是同时发生的。是否有一种方法可以同时创建自定义用户和身份验证用户 如果这是不可能的:我的问题发生在用户注册之后。当创建身份验证用户(和令牌)时,用户被重定向到我的主屏幕,在那里我返回包含来自自

我正在使用Firebase为我的后端创建React本机应用程序。Firebase身份验证用于用户创建,无论何时创建用户,我都会将自定义用户数据存储在实时数据库中。为此,我使用Firebase云函数(Javascript):

如果我理解正确,那么
onCreate()
方法似乎是在创建auth用户之后发生的,而不是同时发生的。是否有一种方法可以同时创建自定义用户和身份验证用户

如果这是不可能的:我的问题发生在用户注册之后。当创建身份验证用户(和令牌)时,用户被重定向到我的主屏幕,在那里我返回包含来自自定义用户的某些信息的JSX,如:
{customUser.activityDuration}
。问题在于,onCreate方法完成所需的几分钟内,
customUser
null
,对activityDuration的调用返回一个错误


解决这个问题的最佳实践是什么?

你说得对-云函数总是在触发它们的事件发生后运行。这种行为无法改变。只有在功能成功的情况下,才能成功创建用户

您可以改为在数据库中的位置设置一个数据库侦听器,该位置应在函数完成后编写。您的代码应该具有新创建的用户的UID,您可以使用该UID构建要查询的位置,该位置应在函数完成后填充。当数据第一次可用时,您的侦听器将触发,并且您的应用程序可以从此处继续

这与我在文章中推荐的非常相似,只是我的示例使用了Firestore

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);
});