【问题标题】:Firestore: Usage of request.resource.size rule returns FirebaseError: Missing or insufficient permissionsFirestore:request.resource.size 规则的使用返回 FirebaseError:缺少权限或权限不足
【发布时间】:2019-04-30 10:24:40
【问题描述】:

我正在尝试设置 Firestore 安全规则来限制传入数据的大小。

service cloud.firestore {
  match /databases/{database}/documents {
  match /events/{eventId}{
        allow read: if request.auth.uid != null;     
        allow write: if request.auth.uid != null
            && request.resource.size < 1*1024*1024;
      }
  }
}

以上安全规则返回错误

FirebaseError:权限缺失或不足。

如何验证传入数据的大小而不出错?

Firestore structure

firestore_db.collection('/events').add({
            createdAt: firebase.firestore.Timestamp.now().toMillis(),
            uid: currentUserId,
            actionData: JSON.stringify((action)
            )
          });  

示例代码

【问题讨论】:

  • 规则本身还没有做任何事情。请编辑您的问题以包含重现错误的最少代码。
  • 编辑问题以添加示例代码和图像以显示节点结构。谢谢!
  • 我的第一个建议是测试哪个子句失败。所以 1) 用if true 进行测试,这肯定可以工作,2) 然后用if request.resource.size &lt; 1*1024*1024 进行测试,我希望它也可以工作。如果这些有效,而完整规则无效,那么您的用户似乎根本没有登录。好的,所以也许在其他步骤之前先console.log(currentUserId)。 :)
  • 如果我将规则调整为 ``` 允许写入:如果 request.auth.uid != null; ``` 这总是有效的。所以只有 request.resource.size 会引发错误。
  • 嗯...实际上我并不太惊讶,因为 Resource 在 Firestore 中没有 size 属性:firebase.google.com/docs/reference/rules/…。另请注意,Firestore 将始终拒绝资源大于 1MB 的写入,因为这是最大文档大小。

标签: google-cloud-firestore firebase-security


【解决方案1】:

在 Cloud Firestore 中,Resource 类型没有 size 属性。你可能把它误认为Resource type in Storage,它确实有这样的属性。

另请注意,Firestore 将始终拒绝资源大于 1MB 的写入,因为这是最大文档大小。

【讨论】:

  • firestore 文档中的一个示例提到了 request.resource.size firebase.google.com/docs/storage/security#data_validation.. 的用法。如何实现类似的?
  • 该链接指向 Cloud Storage for Firebase 的文档,这是一种存储文件的解决方案。您正在尝试在 Cloud Firestore 的安全规则中使用它,这是一种存储结构化 NoSQL 数据的解决方案。
  • 感谢您的意见!如果我理解正确,firestore 无法检查规则中传入数据的大小,但 firestore 会自动拒绝超过 1MB 的写入。
猜你喜欢
  • 2022-01-15
  • 2021-12-01
  • 2022-01-25
  • 2021-10-31
  • 1970-01-01
  • 2020-10-27
  • 1970-01-01
  • 1970-01-01
  • 2021-09-12
相关资源
最近更新 更多