firebase-storage - 如何在 Firebase 存储上按时间限制文件上传
问题描述
我正在尝试编写一个规则来阻止恶意用户快速更新他们的个人资料图片。
我在文档中找到了这个例子
// Allow reads if the resource was updated less than an hour ago
allow read: if resource.updated < request.time + duration.value(60, "m")
我想做类似的事情,我想让用户仅在自上次更新后经过 x 时间时才更新文件。
假设我不想让用户每小时更新一次以上的个人资料图片,我写了这条规则。
request.time >= resource.updated + duration.value(1, "h")
该规则每次都阻止写入,因为测试建议我将持续时间设置为 10 秒duration.value(10, "s")
,但即使我等待 10 分钟,上传仍然失败。
我不确定为什么这不起作用,我知道问题出在这条规则上,因为当我删除它时一切都按预期工作。
这是我的规则write
allow write: if request.resource.size < 5 * 1024 * 1024
&& request.resource.contentType.matches('image/.*')
// Only allow uploads once every hour
&& request.time >= resource.updated + duration.value(1, "h")
// Require Authentication
&& request.auth != null && uid == request.auth.uid
// Don't allow anonymous users
&& request.auth.token.firebase.sign_in_provider != 'anonymous';
文档没有显示写作示例,我开始想知道这是否仅适用于read
解决方案
将其更改为“<”而不是 ">=" 并使用 resource.data:
allow write: if request.time < resource.data.updatedAt + duration.value(1, 'h')
推荐阅读
- php - 如何更改 PhpSpreadsheet 中的文本方向?
- javascript - 如何使用javascript为每一行添加前缀、后缀和中缀?
- python - 通过 mypy 使用 Python stdlib 的类型存根
- android - 华为自动阅读短信
- c++ - C++ 中的线程池不使用来自 args 的引用
- java - 如何安全地将查询参数合并到 Python 或 Java 中的 AWS TimeStream 查询中?
- python - 如何将列表写入新的 Excel 工作簿?
- c++ - C++:递归二分算法不断返回 0
- android - 蓝牙 Gatt 服务器 Android 设备 Null
- pandas - 使用多元素计算的交叉表