Firestore安全规则获取功能错误

时间:2019-09-12 14:10:49

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

用户注册后,应用程序会将用户使用为Firebase身份验证生成的 uid 保存在Firestore中。现在,我尝试为一个单独的集合(而不是用户集合)编写一个安全规则,其中仅当请求者的 read write 操作才允许该请求者strong> isAdmin 字段设置为true。正如您在图像上看到的那样,即使 get()函数中的路径正确,我也会遇到不存在的错误。是什么原因导致此错误?

我尝试了许多路径变化,更改集合,将所有内容都小写等。我在Google中找不到关于此的任何内容,官方文档中也以与我使用相同的方式显示了用法。

安全规则:

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /user/{user} {
      allow read,write: if true

    }
    match /akarmi/{akarmiId}{
    allow read, write:
    if get(/databases/$(database)/documents/user/$(request.auth.uid)).data.isAdmin == true
    }
  }
}

我希望这段代码能够运行并允许或禁止访问,并且不会抛出不存在的错误。

3 个答案:

答案 0 :(得分:1)

Working 好的,对于模拟器,firebase uid必须是实际的uid,而我改用request.auth.uid,只提供了电子邮件。提供实际的uid解决了该问题。该错误消息非常令人误解。

答案 1 :(得分:1)

上述Yoann的回应帮助了我。

我必须将用户名提供给模拟器。这样就可以使用get()和exist()函数进行测试,并可以检查数据库条目中的用户角色。

答案 2 :(得分:0)

尝试如下更改代码:

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /user/{user} {
      allow read,write: if true

    }
    match /akarmi/{akarmiId}{
    allow read, write:
    if get(/databases/$(database)/documents/user/$(request.auth.uid)).data.isAdmin == true ||
    get(/databases/$(database)/documents/user/$(request.auth.uid)).isAdmin == true
    }
  }
}

根据this帖子,其中是安全规则中的错误。可能情况仍然没有解决。