我正在使用 Firebase storage 和 firestore with flutter, 我遇到了两种检索 Firebase 存储映像的选项
在 firestore 数据库中设置 Firebase 存储图像 url,然后使用网络图像获取它
直接从 Firebase 存储中获取图片网址
我对代币了解不多。 我的安全规则规定只有 auth 用户可以读取我的 Firebase 存储,但如果我使用第一个选项,我的带有令牌的图像 url 将使用该 url 存储在我的 firestore 数据库中,任何人都可以访问我的存储。我不确定 Firebase 是否会自动刷新它的存储令牌,如果是这种情况,我的应用程序会崩溃。 哪种方式最安全,最持久,或者请回答是否有其他安全的获取图像的方式
答案 0 :(得分:1)
Firebase 存储令牌不会过期,除非您撤销它们。如果您覆盖图像,即更新它,令牌可能会更新。现在,如果您想发出单独的请求只是为了在上传图像时获取下载 URL 或将 URL 存储在实时数据库中并与其他数据一起获取,那么这完全是您的要求。
Firebase Storage 的安全规则将阻止未经身份验证的用户仅获取下载 URL。如果经过身份验证的用户与任何人共享 URL,他们将能够看到图像,因为他们现在拥有带有该随机令牌的 URL。
如果您从实时数据库中获取的数据要求用户首先登录,那么我会将 URL 存储在数据库本身中,因为我认为发出另一个请求并没有意义Firebase 存储的规则相同。我不知道您的确切用例,因此这样做可能会有例外。
如果您并不总是需要该图像 URL,那么这可能会浪费带宽,那么您应该考虑单独请求以获取存储 URL。
service firebase.storage {
match /b/{bucket}/o {
match /{allPaths=**} {
allow read, write: if request.auth != null;
}
}
}
这些规则将允许任何经过身份验证的用户请求 URL。但正如我之前提到的,任何拥有此链接的人都可以访问该文件。