5

Pracuję z Firebase i AngularJS. Używam uwierzytelniania Auth dla logowania google i ukończyłem proces. Teraz muszę pobrać dane użytkownika przechowywane w lokalnej pamięci, takie jak firebase: authUser :.Firebase pobiera dane użytkownika przechowywane w lokalnej pamięci jako firebase: authUser:

Po zalogowaniu się na konto Google w magazynie lokalnym masz firebase: authUser: .created i muszę pobrać te szczegóły.

użyłem następującej metody przechowywania danych użytkownika

firebase.database().ref('users/' + user.uid).set 
({ 
    name: user.displayName, 
    email: user.email, 
    token: token 
}); 

Odpowiedz

1

Aby uzyskać informacje z profilu użytkownika, należy użyć właściwości instancji Użytkownika. Na przykład:

var user = firebase.auth().currentUser; 
var name, email, photoURL, uid; 

    if(user != null) { 
     name = user.displayName; 
     email = user.email; 
     photoUrl = user.photoURL; 
     uid = user.uid; 
    } 

Jeśli chcesz dowiedzieć się więcej o tym, jak zarządzać użytkownikami w Firebase wykorzystaniem Web SDK, odwiedź tę documentation.

+2

Próbowałem już tego, ale zwracano wartość null dla currentUser. Ale znajduję dane przechowywane w pamięci lokalnej tak jak w przypadku klucza ** firebase: authUser: _val _ ** Aby uzyskać więcej wyjaśnień ** Pamiętaj, że korzystam z uwierzytelniania Gmaila i zapisuję otrzymane wartości ** – Abraham

6

Dokumentacja dla sieci Web SDK nie wspomnieć, że po uwierzytelnieniu pomyślnym Firebase ustawia obiekt w localStorage User. Odwołanie API również o tym nie wspomina. Odkryłem to w ten sam sposób, analizując localStorage, próbując skonfigurować moją aplikację Vue w Firebase.

Aby pobrać użytkownikowi localStorage, można wykonać następujące czynności:

const authUser = Object.keys(window.localStorage) 
    .filter(item => item.startsWith('firebase:authUser'))[0] 

Można mieć wiele wpisów w localStorage więc to jest powód dla filter()

EDIT: Patrz odpowiedź Metalliki poniżej.


Aktualizacja (21.02.2018): Wydaje się, że obecnie jest sekcja (Web) Authentication State Persistence . Nie jestem pewny, czy tak było, kiedy pierwotnie opublikowałem swoją odpowiedź, ale aktualizuję tę odpowiedź, aby ją połączyć, ponieważ to pytanie jest zwracane na umiarkowaną uwagę.

Update 2 (21.02.2018): Jak podano pod Overview of persistence behavior :

Jeśli żaden użytkownik nie jest zalogowany, a nie utrzymywanie jest określony, ustawienie domyślne zostaną zastosowane (local w app przeglądarki) .

Więc localStorage jest domyślnym co potwierdza mój oryginalny odpowiedź przed Firebase JS SDK było open source.

6

Wystarczy poszerzyć odpowiedź @Franciso Mateo: wspomniany filtrowanie, po prostu zwraca klucz (String), z którym w odcinkach obiekt użytkownika są przechowywane w pamięci lokalnej. Aby uzyskać faktyczny zserializowany obiekt użytkownika, musimy odczytać element z tym kluczem z pamięci lokalnej:

const userKey = Object.keys(window.localStorage) 
    .filter(it => it.startsWith('firebase:authUser'))[0]; 
const user = userKey ? JSON.parse(localStorage.getItem(userKey)) : undefined;