我对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
字段匹配的值。
答案 0 :(得分:3)
根据Todd Kerpelman Cloud Firestore没有时间搜索数据库中的每条记录以确保您的用户具有访问权限,因此它将拒绝此查询。相反,您需要运行一个查询,其中Cloud Firestore可以“证明”您检索的所有文档都是有效的。
<强>解决方案:强>
尝试使用此查询,指定您只想接收用户的文档:
FirebaseFirestore.getInstance().collection("docs").whereEqualTo("userId", uid )
其中uid是您的身份验证用户的uid:
String uid = FirebaseAuth.getInstance().currentUser.getUid()