我正在尝试了解 token 在 Firebase 存储中的工作原理。
每当我的网络应用程序将图像上传到 FS 时,它都会向其公共(public) url 添加一个 token 。问题是每当您将相同的图像文件上传到网络应用程序的另一部分时,似乎您没有得到另一个文件,而是已经上传的文件 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 存储中获得全新的副本,文件将被以新 token 结尾的 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
最佳答案
token 对于特定版本的上传是唯一的。如果您用新内容覆盖该文件,则会生成一个新 token ,其中包含一个新的不可猜测的 url。
换句话说, token 对于特定的 blob 是唯一的——它们不是每个存储位置唯一的。我们这样做是为了加强安全措施,以确保开发人员和最终用户不会意外泄露他们不希望泄露的数据。
但是,您可以使用我们的 js SDK 将存储位置(“gs://mybucket/myfile.png”)转换为下载 url。这样,您可以根据需要传递 gs uri,并在您想将其放入图像后将其转换为完整的 URL。
参见:https://firebase.google.com/docs/reference/js/firebase.storage.Reference.html#getDownloadURL
关于javascript - 了解 Firebase 存储 token ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39293781/