首页 > 解决方案 > 获取符合存储规则的 Firebase Cloud Storage 的客户端 URL

问题描述

我在 Firebase 上有一个 Web 应用程序,我在其中创建了一个引用 Firebase 存储文件的 Firestore 文档。

我已将 Firebase 存储上的规则设置为仅allow read: if request.auth != null.

由于 Firestore 遵守类似的规则,我能够确保只有在用户通过身份验证时才能访问我的 Firestore 文档,但是如何最好地在我的 Web 应用程序中将相同的规则强制执行到 Firebase 存储文件?

  1. getDownloadUrl()当我上传文件并将 URL 存储在我的 Firestore 文档中时,我可以使用它。- 但 URL 始终对任何人公开
  2. 我可以创建一个 Firebase 函数,在每个请求上检查身份验证,如果经过身份验证,生成一个getSignedUrl()过期时间为 5 分钟的函数,然后执行 302 重定向到临时公共 URL - 但这不符合 Firebase 存储规则,所以我需要复制函数中的任何新规则集

为什么 Firebase 存储不能像 Firestore 那样简单地运行并检查 http 请求的身份验证并返回文件是否符合规则?

我是否完全错过了 3) 和更好的选项来确保用户在访问存储中的文件之前已登录?

标签: firebasegoogle-cloud-firestoregoogle-cloud-storagefirebase-storage

解决方案


当我上传文件并将 URL 存储在我的 Firestore 文档中时,我可以使用 getDownloadUrl()。- 但 URL 始终对任何人公开

从文档中可能不是很清楚,但这正是下载 URL 的设计方式。

为什么 Firebase 存储不能像 Firestore 那样简单地运行并检查 http 请求的身份验证并返回文件是否符合规则?

当您使用提供的客户端 SDK 下载文件(不使用下载 URL)时,它的行为类似。不幸的是,Web SDK 没有文件下载 API(而AndroidiOS有)。

如果您想提交 Web SDK 的功能请求,应该去Firebase 支持。目前,您必须使用可公开访问的下载 URL。或者,您可以创建自己的后端端点,使用 Firebase Admin SDK验证客户端提供的身份验证令牌。后端代码可以决定用户是否应该能够获取文件内容。


推荐阅读