我的Firestore中有以下规则
service cloud.firestore {
match /databases/{database}/documents {
match /users/{userId}/{documents=**} {
// Only the authenticated user who authored the document can read or write
allow read: if request.auth.uid == userId;
allow write;
}
}
}
这似乎不起作用,我正在使用Rest API来获取数据 为了进行身份验证,我致电: https://www.googleapis.com/identitytoolkit/v3/relyingparty/verifyPassword?key=[API_KEY]
一旦通过身份验证,我们将获得idToken并作为下一个URL的Authorization标头传递 https://firestore.googleapis.com/v1beta1/projects/ /数据库/(默认)/文档/用户
users集合具有id作为文档名称,并且值只是一堆虚拟键。
运行客户端时,我得到的错误是
{u'status':u'PERMISSION_DENIED',u'message':u'缺少权限或权限不足。',u'code':403}
如果我对用户ID的值进行硬编码,它将起作用。因此,出于某种原因,{userid}中返回的值似乎与UID不匹配。
有人可以帮忙解释一下为什么会发生这种情况吗?
谢谢 公羊
答案 0 :(得分:1)
您不需要document = **选择器
service cloud.firestore { match /databases/{database}/documents { // dissallow all access match /{documents=**} { allow read, write: if false; } // Make sure the uid of the requesting user matches name of the user // document. The wildcard expression {userId} makes the userId variable // available in rules. match /users/{userId} { allow read, update, delete: if request.auth.uid == userId; allow create: if request.auth.uid != null; } } }
https://firebase.google.com/docs/firestore/security/rules-conditions