Flutter 使用 Cloud Firestore 和 Firebase Auth 存储用户数据

Posted

技术标签:

【中文标题】Flutter 使用 Cloud Firestore 和 Firebase Auth 存储用户数据【英文标题】:Flutter store users data with Cloud Firestore and Firebase Auth 【发布时间】:2021-08-27 02:13:03 【问题描述】:

我在 Cloud Firestore 中有一组“用户”,我正在使用 Firebase Auth 对我的应用用户进行身份验证,如下所示:

    用户在移动应用程序中进行身份验证(例如使用 Google)。 我确认“用户”集合中没有与经过身份验证的用户的 UID 对应的文档。 如果“用户”中不存在该文档,我将使用用户的 UID 创建一个新文档。

这是我的问题: 此型号或其他型号是否存在安全问题?

我对 Google 文档感到困惑,因为它说用户的 UID 对 Firebase 项目是唯一的,但不应用于向后端服务器验证我的用户。它还说,在这种情况下,我应该使用 FirebaseUser.getToken () 但该令牌可以更改,因此它将在我的数据库中创建一个新用户。

所以,我的第二个问题是:你应该什么时候使用那个令牌?请给我一个例子。

感谢您的帮助。

【问题讨论】:

您能否指出官方文档中您读到的 UID“不应用于向后端服务器验证我的用户”? 当然,firebase.google.com/docs/auth/android/manage-users ... 它在获取用户个人资料(如评论)的代码中 【参考方案1】:

USER_ID

您可以使用 google 生成的 user_id 以供将来参考。只要用户已经在数据库中,对于给定的用户电子邮件或身份验证类型,这将永远不会改变。

示例: 如果用户使用 user1@example.com 使用 google federated login 登录,则用户记录将保存在 Firebase 中,并且将分配 USER_ID(例如ABFDe12cdaa2...)(您可以在 URL 中使用此 ID 来查看用户配置文件等有点长 32 个字符(我不确定这里到底是什么)。现在,如果用户尝试使用相同的电子邮件(user1@example.com)再次注册,那么它会提取上一条记录ABFDe12cdaa2...。如果你删除一个来自 firebase 数据库的 user1@example.com(Firebase 为您的项目维护自己的用户数据库,With 的用户属性数量有限)。然后用户尝试再次登录,然后生成新的 USER_ID。

现在是TOKEN

由于您的 USER_ID 是公开的,因此每个人都可以看到。它不用于身份验证。

因此,您需要生成令牌(这是更长的用户 ID)以通过 Firebase 以编程方式进行身份验证。它的令牌是临时的并且特定于用户。它将在一段时间后过期(您可以在创建令牌时定义该时间)。刷新令牌用于获取新令牌。

在编写此答案时,我没有任何代码示例。我会更新代码示例,如果我找到了。

希望我澄清了你的一些问题。

【讨论】:

@LucasPatiño 这能回答你的问题吗? 感谢回复,我了解其中的区别,但我不确定我保存用户的方式是否存在安全问题。 你还没告诉我你在说什么。如果用户特定于您的应用程序在 firestore 集合中,通常会保存额外的属性。但是您需要使用安全规则来保护访问。如果您可以分享您的规则,我们可以告诉您。 @nagabandaru 我保存用户的方式是在最初的问题中。在那里你可以像我一样逐步找到它。

以上是关于Flutter 使用 Cloud Firestore 和 Firebase Auth 存储用户数据的主要内容,如果未能解决你的问题,请参考以下文章

Cloud Firestore 连接我的 Flutter Windows 应用

在 Flutter 中使用 Cloud Firestore 创建无限列表

查询时如何在 Flutter (Dart) 中使用变量 Cloud Firestore

Flutter 应用程序未使用 cloud_firestore 插件编译

Flutter Firebase Cloud 功能无法调用

如何使用 graphql 从 Firebase 使用 Flutter 从 Cloud Firestore 获取数据?