首页 > 解决方案 > 如何在 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

标签: firebase-storage

解决方案


将其更改为“<”而不是 ">=" 并使用 resource.data:

allow write: if request.time < resource.data.updatedAt + duration.value(1, 'h')

推荐阅读