【问题标题】:Firestore security - Allow read if user's uid equals document's field value uidFirestore 安全性 - 如果用户的 uid 等于文档的字段值 uid,则允许读取
【发布时间】:2020-01-23 03:21:35
【问题描述】:

如果用户的 uid 与文档的 uid 匹配,我试图只允许读取某些文档。

resource.data.uid == request.auth.uid

安全模拟器给了我这条线的这个错误。

错误:simulator.rules 行 [20],列 [16]。空值错误。

这是 Firestore 安全规则不支持的功能吗?

【问题讨论】:

  • 请编辑问题以显示整个规则,而不仅仅是一个表达式。另请说明您是如何使用模拟器的,以及您正在使用的数据。
  • 你好道格!我看过你的一些视频!通过放置通配符文档而不是确切的文档 ID,我意识到我错误地使用了模拟器。谢谢你的提示!

标签: google-cloud-firestore firebase-security


【解决方案1】:

如果我理解得很好,我想你想要这样的东西:

service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow list, create: if request.auth.uid != null;
      allow get, update, delete: if request.auth.uid != null && resource.id == request.auth.token.email;
    }
  }
}

此代码应允许用户创建自己的文档并仅访问/编辑它们。

另外,list 允许在创建文档之前检查文档是否存在,因此显然需要允许所有经过身份验证的用户使用。

请注意,resource.id 实际上是文档的名称。所以这意味着当你创建一个文档时,它的名字必须是用户uid。当然,对于同一个用户,每个集合不能有多个文档。

【讨论】:

    猜你喜欢
    • 2022-12-07
    • 2021-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-22
    • 1970-01-01
    • 1970-01-01
    • 2018-09-11
    相关资源
    最近更新 更多