【问题标题】:Understanding Firebase Storage tokens了解 Firebase 存储令牌
【发布时间】:2017-01-10 15:38:11
【问题描述】:

我正在尝试了解令牌在 Firebase 存储中的工作原理。

每当我的网络应用程序将图像上传到 FS 时,它都会在其公共 URL 中添加一个令牌。问题是,每当您将相同的图像文件上传到网络应用程序的另一部分时,似乎您没有获得另一个文件,而是已经上传的文件 url 的标记不同,从而为前一个呈现 403 错误注册图像显示。

有没有办法解决这个问题?

例子:

storageRef.put(picture.jpg);
uploadTask.snapshot.downloadURL 
// returns something like https://firebasestorage.googleapis.com/v0/b/<your-app>/o/picture.jpg?alt=media&token=09cb2927-4706-4e36-95ae-2515c68b0d6e

然后该 url 会显示在 img src 内的某处。

<img src="https://firebasestorage.googleapis.com/v0/b/<your-app>/o/picture.jpg?alt=media&token=09cb2927-4706-4e36-95ae-2515c68b0d6e">

如果用户重复该过程并在应用的另一部分上传相同的图片.jpg,而不是在 Firebase 存储中获取全新的副本,文件将被以新令牌结尾的 URL 覆盖;说 12345。

所以:

 <img src="https://...picture.jpg?alt=media&token=12345"> // New upload renders fine
 <img src="https://...picture.jpg?alt=media&token=09cb2927-4706..."> // But old upload breaks because of wrong url

【问题讨论】:

  • 使用图片的本地缓存
  • 这是一个网络应用程序,即使文件相同,每个图像都需要自己的url。
  • 抱歉,我以为是移动应用
  • 我没有指出这一点很糟糕。已编辑。
  • 你指的是什么类型的令牌?可以加minimal code that reproduces the problem吗?这通常会澄清很多事情,并使我们能够更有效地为您提供帮助。

标签: javascript firebase firebase-storage


【解决方案1】:

对于公共文件上传:如果您在 firebase 函数中上传文件,您需要在引用对象上调用 makePublic() 以便在没有有效令牌的情况下访问它。

【讨论】:

    【解决方案2】:

    对于特定版本的上传,令牌是唯一的。如果您用新内容覆盖文件,则会生成一个带有新的不可猜测的 url 的新令牌。

    换句话说,令牌对于特定的 blob 是唯一的——它们不是每个存储位置唯一的。我们这样做是为了提高安全性,以确保开发人员和最终用户不会意外泄露他们不希望的数据。

    但是,您可以使用我们的 js SDK 将存储位置(“gs://mybucket/myfile.png”)转换为下载 URL。这样,您可以根据需要传递 gs uri,并在要将其放入图像时将其转换为完整的 URL。

    见:https://firebase.google.com/docs/reference/js/firebase.storage.Reference.html#getDownloadURL

    【讨论】:

    • "unguessable url" 这有多安全?有人可以强行进入 URL 吗?谢谢!
    • @siebmanb 猜测生成的令牌是不切实际的。他们退出了很长时间,并且在尝试下载文件一定次数后,firebase 会限制调用者
    猜你喜欢
    • 1970-01-01
    • 2019-04-01
    • 2013-10-12
    • 2018-11-12
    • 1970-01-01
    • 2020-09-10
    • 2018-02-16
    • 2020-09-16
    • 2021-12-02
    相关资源
    最近更新 更多