Firebase 规则如何获取“request.auth.uid”字段?

Posted

技术标签:

【中文标题】Firebase 规则如何获取“request.auth.uid”字段?【英文标题】:How Firebase rules get 'request.auth.uid' field? 【发布时间】:2022-01-05 12:19:30 【问题描述】:

在应用程序的主线程中,很明显,任何Firestore 查询都会从当前FirebaseAuth 登录中获取request.auth 字段。但我不确定何时涉及工作线程。

假设使用我的应用程序的用户发送一些数据以存储在Firestore 中,其规则允许基于用户 ID 进行写入。现在我将任务添加到 android WorkManager。即使在工作开始之前,如果用户退出,工作是否成功完成?如果不是,那么正确的做法是什么?

【问题讨论】:

【参考方案1】:

您可以参考这个page 了解有关 WorkManager 基础知识的详细信息。

WorkerManager 不管理任务中的详细信息,特别是用于对 Firestore 进行 API 调用的凭据。

任何存储在 WorkerManager 中的任务都应该包含一个不基于会话的身份验证方法(因为此会话已关闭或过期),或者能够生成自己的会话。

解释一下,Firebase 用户可以有多种与 account 相关联的身份验证方法,其中一种方法可以是基于设备的(例如使用 phone number authentication 或 Google Authentication)。

与documentation 一样,此登录信息可以由应用程序存储,以便它可以使用它们从后台任务自行登录。本质上是使用用户的凭据来启动新的登录。由于凭据与设备的登录用户一起存储,因此用于生成 Firebase 会话。

另一个选项以类似的方式工作,但具有更固定的登录持续时间,即一旦通过 SMS 进行身份验证,此令牌将绑定到设备的电话号码,并可用于使用相同的凭据通过以下方式进行身份验证SafetyNet 用于Firebase Authentication。

【讨论】:

目前我只使用手机验证,这需要用户输入发送的 otp。在这种情况下,我如何自行登录?我找不到与此相关的任何文档或代码 sn-p。如果你找到了,请给它链接。 这个Send a verification code to the user's phone 能回答你的问题吗? 不,我想知道如何从工作线程登录帐户。 如果有帮助,您可以查看documentation 中的匿名身份验证!

以上是关于Firebase 规则如何获取“request.auth.uid”字段?的主要内容,如果未能解决你的问题,请参考以下文章

获取符合存储规则的 Firebase Cloud Storage 的客户端 URL

Firebase 存储规则错误:意外标识符;从文档中获取的功能

读取 Firebase 存储映像安全规则

如何根据用户配置文件配置 Firebase 安全规则?

如何使用命令行部署 Firebase 数据库安全规则?

如何从 swift 代码中应用 firebase 数据库安全规则