Firestore安全规则不起作用

时间:2018-08-24 14:02:10

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

我的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不匹配。

有人可以帮忙解释一下为什么会发生这种情况吗?

谢谢 公羊

1 个答案:

答案 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