首页 > 解决方案 > Firestore 安全规则获取功能错误

问题描述

当用户注册时,应用程序会使用为 Firebase 身份验证生成的相同uid将用户保存在 Firestore 中。现在,我正在尝试为单独的集合(而不是用户集合)编写安全规则,其中只有在请求者将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
    }
  }
}

我希望此代码能够运行并允许或禁止访问,并且不会引发不存在的错误。

标签: firebasegoogle-cloud-firestorefirebase-authenticationfirebase-security

解决方案


我通过以下配置解决了我的问题: 在此处输入图像描述

您必须设置一个真实的 Firebase UID 才能使用模拟器,实际的 UID 解决了问题,错误消息非常具有误导性。


推荐阅读