仅当资源不可用时才允许写入';Firebase存储上已不存在
我正在尝试设置Firebase安全规则,仅当同名文件不存在时才允许上载文件。理想情况下,我希望在新文件的内容与现有文件相同时支持重写文件 我尝试了以下方法:仅当资源不可用时才允许写入';Firebase存储上已不存在,firebase,firebase-storage,Firebase,Firebase Storage,我正在尝试设置Firebase安全规则,仅当同名文件不存在时才允许上载文件。理想情况下,我希望在新文件的内容与现有文件相同时支持重写文件 我尝试了以下方法: allow write: if !resource; 及 及 但两者似乎都不起作用。他们所做的只是不允许任何上传。我认为您需要以下组合: service firebase.storage { match /b/<your-bucket>/o { match /path/to/file { // !res
allow write: if !resource;
及
及
但两者似乎都不起作用。他们所做的只是不允许任何上传。我认为您需要以下组合:
service firebase.storage {
match /b/<your-bucket>/o {
match /path/to/file {
// !resource allows the upload of a new file
// hash comparison allows re-upload of the same file
allow write: if !resource || request.resource.md5hash == resource.md5hash;
}
}
}
service firebase.storage{
匹配/b//o{
匹配/path/to/file{
//!resource允许上载新文件
//哈希比较允许重新上载同一文件
允许写入:if!resource | | request.resource.md5hash==resource.md5hash;
}
}
}
改用资源==null
文档中确实缺少这一点,但在md5注释下:
注意:MD5哈希冲突是可能的,并且可能允许某人覆盖文件,即使存在类似上述规则。考虑附加文件验证或其他规则来强制不可变(例如:代码>允许写入:如果资源=null;< /代码>)
谢谢你,迈克!我尝试了你的建议,但在我应用这些规则后,我仍然会为我尝试上传的每个文件获取HTTP403。当我使用
allow write时,它确实允许我上传代码>。我偶尔也会收到HTTP 500的消息:“检索安全规则失败”!资源也给了我一个问题。!资源失败,错误资源==null对我有效
allow write: if request.resource.md5hash == resource.md5hash;
service firebase.storage {
match /b/<your-bucket>/o {
match /path/to/file {
// !resource allows the upload of a new file
// hash comparison allows re-upload of the same file
allow write: if !resource || request.resource.md5hash == resource.md5hash;
}
}
}