如何检查文件名是否包含 UID 在 Firebase 存储安全规则中?



我想在我的 firebase 存储中制定规则,并且我希望存储在 firebase 存储中的图片的文件名包含其上传者的 uid。 通常在编程语言中,我使用.contains来检查

service firebase.storage {
match /b/{bucket}/o {
match /eventThumbnail/{imageID} {
allow create: if request.resource.name.contains(request.auth.uid)
}
}
}

这个规则有效吗?我在 Firebase 存储安全规则文档中找不到有关使用包含的文档。实际上规则更复杂,我仍然搜索导致我无法创建图像的原因,并且我怀疑规则无效

此处提供了云存储安全规则的 API 文档。 字符串类型对象的特定文档位于此处。 您可以看到,在文档中,字符串没有"包含"方法。 但是有一种方法可以使用正则表达式来验证 matches(( 的字符串内容。

但是,我认为弗兰克在他的评论中是正确的,建议最好在文件路径中使用其 UID 的每个用户使用专用前缀。 例如,"/eventThumbnail/{uid}/{file}"可用于确定在uid下组织的任何文件的权限,其中uid可以简单地验证为等于request.auth.uid(不需要子字符串或正则表达式(。这也比检查文件子字符串更安全、更可靠。

你可以使用这样的东西:

match /{fileName} {
allow read: if fileName[0:6] == 'abcdef';
}

有关字符串规则的文档: https://firebase.google.com/docs/reference/security/storage#string

文件名现在可以用作 UID,并使用此处找到的 Firebase 存储拆分语法进行匹配。

我还建议改用路径作为每个 UID 的前缀,但如果文件已经在生产环境中,拆分语法可能会很有用。

更新: Firebase 文档上的语法似乎不正确,如本文所示

最新更新