【问题标题】:why is firebase firestore rule denies write, indicating '...==...' and '&&' as false为什么firebase firestore规则拒绝写入,指示'...==...'和'&&'为假
【发布时间】:2021-10-28 02:16:17
【问题描述】:

Firestore 安全规则拒绝访问。

规则是:

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /users/{id} {
      allow create, update, delete: if request.auth != null && request.auth.uid == id;
      allow read: if request.auth != null;
    }
  }
}

playground 规则将 '...==...' 和 '&&' 指示为 false。这有什么问题?非常感谢您的帮助!

完整规则和截图:

【问题讨论】:

  • 它只是说“假”。当我运行我的应用程序时,它显示“权限不足或缺少权限”
  • 我们在屏幕截图中看不到您正在测试的用户的 UID,但我假设您与 user 不同,这是您要尝试的文档写。由于您的规则需要 request.auth.uid == id,因此 UID 必须与您正在写入的文档的 ID 匹配。

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


【解决方案1】:
allow create, update, delete: if request.auth != null && request.auth.uid == id;

从您的屏幕截图中,您正在运行更新模拟。

  1. 如果用户未登录,request.auth != null 将失败。
  2. request.auth.uid == id 如果 uid != id; 将失败

从您的屏幕截图中,我们可以看到已验证设置为 true。因此条件 1 将通过。 由于第二种情况,它目前正在失败。 request.auth.uid == id

目前,id == 'user',但 request.auth.uid != 'user';

解决方案。将您的 request.auth.uid 设置为“用户”。为此,请在经过身份验证的 Firebase UID 下输入“用户”(作为您的 Firebase uid)。它应该可以工作。

注意:您可能没有正确地组织数据。您当前的数据结构类似于“users/user”,而应该是“users/{userId}”,其中 userId 在用户创建帐户时由 firebase 生成。

【讨论】:

  • 谢谢,但我很困惑。如何将 request.auth.uid 设置为 'user',你的意思是 request.auth.uid == 'user'?另外,在firebase uid下,将'user' - 你的意思是,在左栏中?对 Firestore 非常陌生...再次感谢!
  • 您将 request.auth.uid 设置为“用户”,方法是转到左侧列,在 firebase uid 下,输入“用户”。是的。随时欢迎您。
  • 知道了!谢谢!我之前没有注意到左侧的 Firebase UID。谢谢!
猜你喜欢
  • 1970-01-01
  • 2019-06-16
  • 2019-10-25
  • 2020-10-18
  • 2020-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-18
相关资源
最近更新 更多