【发布时间】: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_db.collection('/events').add({
createdAt: firebase.firestore.Timestamp.now().toMillis(),
uid: currentUserId,
actionData: JSON.stringify((action)
)
});
示例代码
【问题讨论】:
-
规则本身还没有做任何事情。请编辑您的问题以包含重现错误的最少代码。
-
编辑问题以添加示例代码和图像以显示节点结构。谢谢!
-
我的第一个建议是测试哪个子句失败。所以 1) 用
if true进行测试,这肯定可以工作,2) 然后用if request.resource.size < 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