2016-09-02 14 views
5

Próbuję zrozumieć, jak tokeny działają w Firebase Storage.Omówienie tokenów magazynu Firebase

Zawsze, gdy moja aplikacja internetowa przesyła obraz do FS, dodaje token do swojego publicznego adresu URL. Problem polega na tym, że gdy przesyłasz ten sam plik obrazu do innej części aplikacji internetowej, wydaje się, że nie dostajesz innego pliku, ale innego tokenu dla pliku URL, który został już przesłany, powodując błąd 403 dla poprzedniego zarejestrowany obraz.

Czy istnieje sposób rozwiązania tego problemu?

Przykład:

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 

tego adresu URL jest następnie wyświetlany gdzieś wewnątrz img src.

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

Jeśli użytkownik powtarza ten proces i przesyła tę samą picture.jpg w innej części aplikacji, zamiast się nowy egzemplarz w Firebase magazynowe, plik jest nadpisywany z adresu URL kończącego się na nowy dowód ; powiedzieć 12345.

Więc:

<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 
+0

Stosować lokalne buforowanie obrazów –

+0

Jest to aplikacja internetowa, każdy obraz musi mieć własny adres URL, nawet jeśli plik jest taka sama. – cerealex

+0

Przepraszam, myślałem, że to aplikacja mobilna –

Odpowiedz

6

Żetony są unikalne dla danej wersji na przesłaniu. Jeśli zastąpisz plik nową treścią, nowy token zostanie wygenerowany przy użyciu nowego nieuciążliwego adresu URL.

Innymi słowy, żetony są unikalne dla konkretnego obiektu typu blob - nie są unikatowe dla każdego miejsca przechowywania. Zrobiliśmy to jako zwiększoną miarę bezpieczeństwa, aby zapewnić, że programiści i użytkownicy końcowi nie ujawnili przypadkowo danych, których nie zamierzali.

Można jednak przetłumaczyć lokalizację przechowywania ("gs: //mybucket/myfile.png") na adres URL do pobrania za pomocą naszego zestawu SDK js. W ten sposób możesz ominąć gs uri, jeśli chcesz i przetłumaczyć je na pełny adres URL, gdy chcesz umieścić go w obrazie.

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

Powiązane problemy