【问题标题】:Read / Write only own records on Firestore [duplicate]仅在 Firestore 上读取/写入自己的记录 [重复]
【发布时间】:2017-12-06 11:07:53
【问题描述】:

我对 Firestore 规则很迷茫。

我希望经过身份验证的用户能够读取他们自己的记录,但无法做到这一点。我正在将 userId 写入每条记录。阅读时,我希望用户将获得字段 userId == request.auth.uid 的所有记录,这是我在 Firestore 控制台中的代码:

service cloud.firestore {
  match /databases/{database}/documents {
      match /{document=**} {
          allow read: if resource.data.userId == request.auth.uid;
      }
  }
  match /databases/{database}/documents {
    match /{document=**} {
        allow write: if request.auth.uid != null;
    }
  } 
}

写作没问题,但在阅读时,我的应用程序中出现“权限缺失或权限不足”异常。我检查了FirebaseAuth.getInstance().getUid() 正在返回一个与我的userId 字段匹配的值。

【问题讨论】:

  • 您可以发布用于向数据库发出请求的查询吗?
  • 很简单,FirebaseFirestore.getInstance().collection("docs").get()

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


【解决方案1】:

根据Todd Kerpelman Cloud Firestore 没有时间搜索数据库中的每条记录以确保您的用户具有访问权限,因此它会拒绝此查询。相反,您需要运行一个查询,让 Cloud Firestore 可以“证明”您检索的所有文档都是有效的。

解决方案:

尝试使用此查询,指定您只想接收用户的文档:

FirebaseFirestore.getInstance().collection("docs").whereEqualTo("userId", uid )

其中 uid 是您的身份验证用户的 uid:

String uid = FirebaseAuth.getInstance().currentUser.getUid() 

【讨论】:

  • 谢谢,这解决了我眼前的问题。您是否对 Firebase 来源有任何参考以了解其工作原理?我有几个查询,似乎有点太麻烦,需要适应它们,这样他们就不会要求可能受到限制的部分数据......
  • 好 :) 你的问题和我的类似 stackoverflow.com/a/47579966/1477950 我编辑了我的答案!
猜你喜欢
  • 2019-02-17
  • 2020-10-23
  • 1970-01-01
  • 2020-07-28
  • 2012-08-28
  • 1970-01-01
  • 2016-02-02
  • 1970-01-01
  • 2020-02-07
相关资源
最近更新 更多