了解Firebase存储令牌

时间:2016-09-02 13:35:33

标签: javascript firebase firebase-storage

我试图了解令牌如何在Firebase存储中运行。

每当我的网络应用程序将图像上传到FS时,它都会向其公共网址添加一个令牌。问题是,无论何时将相同的图像文件上传到Web应用程序的另一部分,您似乎都没有获得另一个文件,但是已经上传的文件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">

如果用户重复该过程并在应用的另一部分上传相同的picture.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

2 个答案:

答案 0 :(得分:10)

令牌对于特定版本的上传而言是唯一的。如果您使用新内容覆盖该文件,则会生成一个新的令牌,其中包含一个新的无法访问的网址。

因此换句话说,令牌对于特定blob是唯一的 - 它们不是每个存储位置唯一的。我们这样做是为了增加安全措施,以确保开发人员和最终用户不会意外地暴露他们不想要的数据。

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

请参阅:https://firebase.google.com/docs/reference/js/firebase.storage.Reference.html#getDownloadURL

答案 1 :(得分:0)

对于公共文件上传:如果您在 firebase函数中上传文件,则需要在参考对象上调用makePublic(),以使其在没有有效令牌的情况下可以访问。 / p>