android - 在请求数据时以及我们没有使用 firebase 身份验证的情况下,如何为 firebase firestore 编写安全规则?

标签 android firebase kotlin google-cloud-firestore firebase-security

我使用 Firebase Firestore 进行数据库存储。我有一个场景,我需要使用电话号码和 OTP 管理用户登录和注销。由于 Firebase 身份验证使用电子邮件 ID 管理身份验证,或者如果您每次需要使用 OTP 验证它时都想将其与电话号码一起使用,这对于我的应用程序来说是不可行的,所以,我创建了自己的身份验证流程,其中使用一次 OTP 身份验证,并将用户数据存储到集合中,然后当用户登录后,我直接从集合中检查它。

现在工作正常,但由于我在更改安全规则时遇到问题,因为我想限制用户读取数据库。但我不知道如何编写它,因为到目前为止我已经找到了很多解决方案,但所有解决方案都在请求中进行了身份验证,但由于我没有使用身份验证,我可能在请求中没有身份验证,并且可能会发现它为空。

service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write : if true;
    }
  }
}

我已经授予了对所有集合的读写访问权限,因此任何拥有 key 的人都可以访问数据库,但我想使用安全规则来限制它,并且我找到了一种在创建或更新时限制用户的方法,就像我将要做的那样请求设置或更新时获取资源,但在读取或获取数据时可能没有资源,因为我没有传递任何数据。因此,如果您知道如何编写此类规则,请帮助我。提前致谢...

最佳答案

allow only users that are authentication with Firebase access to data ,你的规则是:

allow read, write: if request.auth.uid != null;

如果没有 Firebase 身份验证,则无法执行相同的操作,因为将用户数据传递到安全规则的唯一方法是通过 Firebase 身份验证。

如果您有自己的身份验证机制,则可以将其实现为 custom provider within Firebase Authentication 。在此方法中,您使用服务器端代码根据您拥有的用户信息生成 Firebase token ,然后该 token 中的信息将在 auth.token 下的安全规则中可用。

关于android - 在请求数据时以及我们没有使用 firebase 身份验证的情况下,如何为 firebase firestore 编写安全规则?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56291839/

相关文章:

java - android 在运行时替换方法调用

Android StreetView 未加载

在一个项目中使用多个应用程序进行 Firebase 身份验证

firebase - Flutter Firestore 地理查询

android - ItemTouchHelper onMove 更新元素位置

java - Kotlin/Java 在 Int 类型的 switch 语句中使用枚举

android - 在 android kotlin mvvm 中没有主构造函数就不可能进行父类(super class)型初始化

java - Android XML 解析 - 标签内有标签的 XML

android - 为 Firebase 设计数据结构

android - Firebase动态链接与动态参数?