Con*_*orW 0 firebase firebase-authentication
因此,我目前正在开发一个项目,其中我使用 Firebase 和 Google 作为唯一的登录/注册提供商实施身份验证。身份验证过程工作正常,但是我想向经过身份验证的用户添加更多且高度特定的属性,并能够操纵这些属性。为此,我计划使用 Google Firestore。
现在的问题是,如何将创建的用户帐户从 firebase auth 镜像到 firestore。我想过只要调用signIn函数就根据UID将其写入firestore,但是存在一个问题,我认为同一用户会有多个条目。
我在一些博客上读到,通过使用云函数可以实现预期的结果,但是我正在寻找可以在下一个项目中实现的解决方案,即使我稍后可能会切换到云函数。
您知道我如何才能达到预期的结果吗?感谢您的帮助,非常感谢!
您在答案中描述的方法(即“将创建的用户帐户从 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)
| 归档时间: |
|
| 查看次数: |
1064 次 |
| 最近记录: |