firebase - Firestore 安全规则拒绝对 firebase-storage 进行读/写
问题描述
尝试将安全规则添加到存储。当我添加安全规则以确保只允许经过身份验证的用户进行读/写时,模拟器正在工作。但是当我尝试对文件大小添加另一个约束时,我遇到了错误。
以下是安全规则:
service firebase.storage {
match /b/{bucket}/o {
match /{allPaths=**} {
allow read, write: if request.auth != null && request.resource.size < 5 * 1024 * 1024;
}
}
}
我有文件,files\
我在模拟器中收到以下错误:
Simulated read denied
错误详情:
Error: simulator.rules line [4], column [29]. Property resource is undefined on object.
如果我也尝试模拟写入,则会出现问题。
EDIT1:重要
好的!我发现了这个问题并尝试在那条线上进行一些实验,并让模拟器允许读/写!我做了以下更改:
allow read, write: if request.auth != null && (request != null
|| request.resource.size < 5 * 1024 * 1024);
这基本上是我添加了一个空检查。所以,目前,我不清楚这里发生了什么!
解决方案
我能够使用类似的规则来解决这个问题
match /users/{uid}/{document=**} {
allow read, create, update: if
request.auth != null &&
request.auth.uid == uid &&
(!("resource" in request) || request.resource.data.uid == request.auth.uid);
}
在这种情况下,我想确保更新中的“uid”属性与用户的 uid 匹配。但是,如果在模拟器中您不先执行“构建文档”,则request.resource
未定义(我认为这是一个错误;应该定义但null
IMO)。
我相信这真的只适用于模拟器,而不是一个现实的场景,因为创建/更新请求将始终包含一个文档,即使是一个空的。但我想我会把它保留在我的规则中,以防万一。
推荐阅读
- spring - 如何处理 Spring Data 中的双向@DBref?
- python-3.x - 子类 psycopg2 异常并重新引发自定义实例
- javascript - 正则表达式匹配除空格和最后 4 个字符以外的所有字符
- python - 如何使用 Python 套接字在 HTTP 服务器中实现 POST 请求
- gcc - 是否可以为链接器开发 GCC 插件?
- java - Spring boot应用程序whitelabel错误页面
- python - 在 hist() 的 python Matplotlib.pyplot 中,我想选择 xlabel 和 ylabel 值
- mongodb - 将 Azure 认知搜索连接到 MongoDB Cloud Atlas
- r - dplyr:使用矩阵中的值子集创建带有 case_when 的新列
- java - 应用程序图标显示在广告中,但应用程序未运行