【问题标题】:Firebase rules - Allow read if user's uid equals document's field value userIdFirebase 规则 - 如果用户的 uid 等于文档的字段值 userId,则允许读取
【发布时间】:2022-12-07 12:05:45
【问题描述】:

如果用户的 uid 与 userId 匹配(用红色圈出),我试图只允许读取硬币的文档。

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    
    match /{document=**} {
        allow read, write: if false;
    }
    
    match /coins/{coinId} {
        allow read: if request.auth != null && resource.data.userId == request.auth.uid;
        allow write: if request.auth != null;
    }
  }
}

当我登录我的帐户时,此规则会在控制台中返回错误。并且没有数据显示。 Uncaught error in snapshot listener: FirebaseError: Missing or insufficient permissions.

根据我在这里阅读的所有内容,似乎以下代码应该可以工作,但事实并非如此。

【问题讨论】:

  • 你能分享你用来进行更新操作的代码吗?另外,您如何获取硬币 ID 以进行更新
  • 这条规则乍一看是正确的,所以问题很可能出在别处。正如 Dharmaraj 所问,您能否展示我们可以针对这些规则运行以解决问题的最少代码?在该代码中,确保显示符合规则,例如通过在尝试访问数据库之前记录 UID。

标签: javascript firebase google-cloud-firestore firebase-security


【解决方案1】:

你的第一条规则 -

match /{document=**} {
    allow read, write: if false;
}

此规则不允许任何人“读取”或“写入”数据库中的任何文档。这就是下一条规则无法正常工作的原因。删除第一个规则并重试。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-08
    • 1970-01-01
    • 1970-01-01
    • 2020-07-11
    • 2021-02-07
    • 2015-03-25
    • 1970-01-01
    • 2021-09-22
    相关资源
    最近更新 更多