了解Firebase存储令牌

cer*_*lex 12 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
Run Code Online (Sandbox Code Playgroud)

那个url然后显示在img src中的某个地方.

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

如果用户重复该过程并在应用的另一部分上传相同的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
Run Code Online (Sandbox Code Playgroud)

Ben*_*lfe 13

令牌对于特定版本的上载是唯一的.如果使用新内容覆盖文件,则将生成带有新的无法访问的URL的新令牌.

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

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

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

  • “无法使用的网址”的安全性如何?有人可以强行闯入URL吗?谢谢! (2认同)

hax*_*nel 5

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