在Firestore上只读/写自己的记录

时间:2017-12-06 11:07:54

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

我对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字段匹配的值。

1 个答案:

答案 0 :(得分:3)

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

<强>解决方案:

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

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

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

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