将 Firebase 身份验证用户映射到 Firestore 文档

Posted

技术标签:

【中文标题】将 Firebase 身份验证用户映射到 Firestore 文档【英文标题】:Mapping Firebase Auth users to Firestore Documents 【发布时间】:2018-03-19 05:41:32 【问题描述】:

我正在尝试使用 FirebaseFirestore 数据库在我的 android 应用中处理 Users。

最初我想使用从Auth 包(字符串)返回的id,并将其设置为数据库中usersCollection 的id。在Collection users 内创建Document 时,我将uid 字段设置为该身份验证包字符串。

我意识到没有办法将该字符串设置为可索引的值,以便查询如下:

// get Auth package uid string
db.collection("users").document(auth_uid_string);

会起作用的。

因此,我想,另一种选择是使用Query.whereEqualTo("uid", auth_uid_string),这将给我一个列表中的用户,因为 firestore 不假定查询是针对唯一值的。

我想避免上述解决方案,并设计一种方法将应用程序的users 存储在firestore 中,并使用auth 包来验证我是否获取了正确的用户。这样的解决方案可能吗?或者我应该尝试不同的 firebase 服务,或者甚至只是在 heroku 中运行 postgres 服务器或其他什么?

【问题讨论】:

【参考方案1】:

我不确定如何在 android 中执行此操作,但使用 JS 我正在执行以下操作:

firebase.firestore().collection('users').doc(currentUser.uid).set(currentUser)

currentUser是认证函数返回的用户对象(我用signInWithCredential) 它运行良好。我相信你可以在 android 中实现类似的方法。

【讨论】:

是的,所以我可以使用set 设置索引。谢谢 我不确定这是否是 Firebase 明确表示的最佳方法: // 用户 ID,Firebase 项目独有。 // 不要使用这个值来验证你的后端服务器, // 如果你有的话。使用 getTokenWithCompletion:completion: 代替。 @JoseTapizquent 这是为了使用您的后端服务器进行身份验证,正如评论明确提到的那样。可以使用用户 ID 来声明文档。 我不确定这是否仍然有效。我不认为currentUser 是可序列化的。我得到FirebaseError: Function DocumentReference.set() called with invalid data. Data must be an object, but it was: a custom Q object

以上是关于将 Firebase 身份验证用户映射到 Firestore 文档的主要内容,如果未能解决你的问题,请参考以下文章

我是 Flutter Web 的新手,如何使用 Firebase 电话身份验证对用户进行身份验证,有没有办法让用户保持登录状态?

Firebase linkwithcredential 不适用于 Facebook

为啥注册用户未在 Firebase 中进行身份验证?为啥用户不能将产品添加到数据库 Firebase?

将 Wordpress 用户导入 Firebase 身份验证

如何使用 Firebase 身份验证和托管将登录用户重定向到子域?

如何将 Firebase 身份验证链接到实时数据库?