Firebase Storageでトークンがどのように機能するかを理解しようとしています。
Webアプリが画像をFS=にアップロードするたびに、トークンがパブリックURLに追加されます。問題は、同じ画像ファイルを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 Storageで新しいコピーが取得される代わりに、ファイルは新しいトークンで終わる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で新しいトークンが生成されます。
つまり、言い換えると、トークンは特定のblobに対して一意であり、保管場所ごとに一意ではありません。これは、開発者とエンドユーザーが意図しないデータを誤って公開しないようにするためのセキュリティ対策の強化としてこれを行いました。
ただし、js SDKを使用して、保存場所( "gs://mybucket/myfile.png")をダウンロードURLに変換できます。これにより、必要に応じてgs uriを渡し、画像に配置したい場合は完全なURLに変換できます。
参照: https://firebase.google.com/docs/reference/js/firebase.storage.Reference.html#getDownloadURL
公開ファイルのアップロードの場合:firebase functionsでファイルをアップロードする場合、有効なトークンなしでアクセスできるようにするには、参照オブジェクトでmakePublic()
を呼び出す必要があります。