基于firebase身份验证在firestore中创建相同的用户

Con*_*orW 0 firebase firebase-authentication

因此,我目前正在开发一个项目,其中我使用 Firebase 和 Google 作为唯一的登录/注册提供商实施身份验证。身份验证过程工作正常,但是我想向经过身份验证的用户添加更多且高度特定的属性,并能够操纵这些属性。为此,我计划使用 Google Firestore。

现在的问题是,如何将创建的用户帐户从 firebase auth 镜像到 firestore。我想过只要调用signIn函数就根据UID将其写入firestore,但是存在一个问题,我认为同一用户会有多个条目。

我在一些博客上读到,通过使用云函数可以实现预期的结果,但是我正在寻找可以在下一个项目中实现的解决方案,即使我稍后可能会切换到云函数。

您知道我如何才能达到预期的结果吗?感谢您的帮助,非常感谢!

Ren*_*nec 5

您在答案中描述的方法(即“将创建的用户帐户从 Firebase 身份验证镜像到 Firestore”)确实是一种标准方法。

您提到了以下风险:

我认为同一用户会有多个条目

如果问题是“如何处理不同用户具有同一用户文档 ID 的风险”,如果您使用uid身份验证服务生成的 userID ( ) 作为文档 ID,则可以确保它是唯一的。

如果问题是“如何为一个用户创建多个用户文档,包含不同的信息”,您可以很好地使用不同的集合,并再次使用uid身份验证服务生成的 userID ( ) 作为文档 ID(每个文档都在不同的集合)。


您基本上有两个选项来创建 Firestore 用户文档:

通过云函数:在这种情况下,您将在创建用户时触发云函数并使用用户的 uid 创建 Firestore 文档。

 exports.createUserDoc = functions.auth.user().onCreate((user) => {
  const userId = user.uid;
  return admin.firestore().collection('users').doc(userId).set( {...} );
});
Run Code Online (Sandbox Code Playgroud)

从前端:您需要设置一个安全规则,仅当文档 ID 等于其 userId 时,才允许用户创建自己的 Firestore 用户文档。这是一个例子:

service cloud.firestore {
  match /databases/{database}/documents {
    // Make sure the uid of the requesting user matches the ID of the user
    // document. The wildcard expression {userId} makes the userId variable
    // available in rules.
    match /users/{userId} {
      allow create: if request.auth != null && request.auth.uid == userId;
    }
  }
}
Run Code Online (Sandbox Code Playgroud)