Firebase 存储:对 Internet 公开特定目录下的文件
Posted
技术标签:
【中文标题】Firebase 存储:对 Internet 公开特定目录下的文件【英文标题】:Firebase Storage: Public to Internet about files under a specific directory 【发布时间】:2021-12-15 10:40:17 【问题描述】:我想将特定目录下的所有文件发布到互联网上。
安全规则
rules_version = '2';
service firebase.storage
match /b/bucket/o
match /public/allPaths=**
allow read;
allow write: if request.auth != null;
如上写好安全规则后,当我打开云存储的浏览器时:
目录下的文件仍设置为私有。 如果您查看每个文件的详细信息,您会发现没有发布任何公共 URL。当我输入Authenticated URL
时,你会被重定向到谷歌的登录页面。
我该如何解决这个问题?
【问题讨论】:
【参考方案1】:Firebase 安全规则仅控制谁可以通过 Firebase SDK 或 REST API 获取特定对象的网址。如果您在 Firebase 控制台中检查对象 URL,您会看到一个格式的 URL,这可能就是您要查找的内容:
https://firebasestorage.googleapis.com/v0/b/[PROJECT].appspot.com/o/public%2Fdog.jpg?alt=media&token=fd991fdf-a33f-4321-9017-09907e1a5243
安全规则只能首先限制用户获取此 URL,但任何拥有此 URL 的人都可以访问图像/文件(如果授权用户共享了该 URL)。
话虽如此,allow read: if true;
规则将允许任何人公开(如上所示)并且他们可以访问它。
如果您还想要来自 GCS 的公共链接,那么您必须从 GCP 控制台编辑权限并允许 allUsers
读取它:
【讨论】:
所以安全规则是不发布公共URL,而只是设置Authenticated URL的范围。谢谢你。但是,在设置了上述安全规则后,当我使用未经身份验证的浏览器打开公共下文件的经过身份验证的 URL 时,我会被重定向到 Google 登录页面。这在我看来就像没有应用安全规则allow read: if true;
。
@kusumoto_teruya 经过身份验证的 URL 不同...您应该在 Firebase 控制台中检查 URL 或使用此处提到的 Firebase SDK 获取一个:firebase.google.com/docs/storage/web/download-files
哦,对不起。我刚刚注意到,当我打开文件详细信息时,“名称”字段被做成了一个链接。所以我们可以使用这个 URL。以上是关于Firebase 存储:对 Internet 公开特定目录下的文件的主要内容,如果未能解决你的问题,请参考以下文章
从firebase函数获取云存储中文件的永久可公开下载URL [重复]
上传图片和 Firebase 显示“用户无权访问此对象”,即使存储设置是公开的
为啥云函数 URL (Firebase) 可以公开访问?如何限制对特定外部呼叫的访问? [复制]
尝试访问公开可用的端点时,部署到 firebase 的 React-app 出现 cors 错误 [重复]