Możesz określić, jak ma być utrzymywany stan uwierzytelniania podczas korzystania z Firebase pakietu SDK JS. Obejmuje to możliwość określenia, czy zalogowany użytkownik powinien jest bezterminowo zachowywany, dopóki nie zostanie jawnie wylogowany, a także zostanie wyczyszczony, gdy okno zostanie zamknięte lub usunięte przy ponownym załadowaniu strony.
W przypadku aplikacji internetowych domyślnym działaniem jest utrwalanie sesji użytkownika nawet po zamknięciu przeglądarki przez użytkownika. To wygodne, ponieważ użytkownik nie wymaga ciągłego logowania się przy każdym odwiedzeniu strony urządzenia. Może to wymagać od użytkownika ponownego wprowadzenia hasła, wysłania weryfikacja przez SMS itp., która może utrudniać korzystanie z internetu.
W niektórych przypadkach takie zachowanie może jednak nie być idealne:
- Aplikacje z danymi wrażliwymi mogą chcieć wyczyścić stan, gdy okno jest zamknięta. Jest to ważne, jeśli użytkownik zapomni się wylogować.
- Aplikacje używane na urządzeniu współużytkowanym przez wielu użytkowników. Częstym Oto przykład aplikacji uruchomionej na komputerze w bibliotece.
- Aplikacja na współdzielonym urządzeniu, z którego może korzystać wielu użytkowników. Deweloper nie jest w stanie określić, w jaki sposób uzyskuje się dostęp do aplikacji, i może chcieć aby użytkownik mógł zdecydować, czy kontynuować sesję lub nie. Można to zrobić, dodając opcję „Zapamiętaj mnie”. podczas logowania.
- Czasami deweloper może nie chcieć, aby anonimowy użytkownik był zachowywany. dopóki użytkownik nie przejdzie na nieanonimowe konto (sfederowane, telefon itp.).
- Programista może zezwalać na logowanie się do aplikacji różnym użytkownikom. na różnych kartach. Domyślnym działaniem jest zachowywanie stanu na różnych kartach dla tego samego punktu początkowego.
Jak wspomniano powyżej, istnieje wiele sytuacji, w których domyślna wartość stała trwałość może zostać zastąpiona.
Obsługiwane typy trwałości stanu uwierzytelniania
Możesz wybrać jeden z 3 typów trwałości stanu uwierzytelniania na określonym wystąpienia uwierzytelniania Firebase na podstawie wymagań aplikacji lub użytkownika.
Typ wyliczeniowy | Wartość | Opis |
---|---|---|
firebase.auth.Auth.Persistence.LOCAL |
„lokalny” | Wskazuje, że stan zostanie zachowany nawet wtedy, gdy okno przeglądarki będzie jest zamknięta lub aktywność została zniszczona w React Native. Wyraźne wylogowanie jest konieczna do usunięcia tego stanu. Pamiętaj, że sesje internetowe uwierzytelniania Firebase pojedyncze źródło hosta i będzie zachowywane tylko dla jednej domeny. |
firebase.auth.Auth.Persistence.SESSION |
„session” | Wskazuje, że stan zostanie zachowany tylko w bieżącej sesji lub na bieżącej karcie, i zostanie wyczyszczone, gdy karta lub okno, w którym użytkownik się uwierzytelnił jest zamknięte. Dotyczy tylko aplikacji internetowych. |
firebase.auth.Auth.Persistence.NONE |
„none” (brak) | Wskazuje, że stan zostanie zapisany tylko w pamięci i zostanie wyczyszczony po odświeżeniu okna lub aktywności. |
Modyfikowanie trwałości stanu uwierzytelniania
Możesz określić lub zmienić istniejący typ trwałości, wywołując metodę
Metoda firebase.auth().setPersistence
:
Web
import { getAuth, setPersistence, signInWithEmailAndPassword, browserSessionPersistence } from "firebase/auth"; const auth = getAuth(); setPersistence(auth, browserSessionPersistence) .then(() => { // Existing and future Auth states are now persisted in the current // session only. Closing the window would clear any existing state even // if a user forgets to sign out. // ... // New sign-in will be persisted with session persistence. return signInWithEmailAndPassword(auth, email, password); }) .catch((error) => { // Handle Errors here. const errorCode = error.code; const errorMessage = error.message; });
Web
firebase.auth().setPersistence(firebase.auth.Auth.Persistence.SESSION) .then(() => { // Existing and future Auth states are now persisted in the current // session only. Closing the window would clear any existing state even // if a user forgets to sign out. // ... // New sign-in will be persisted with session persistence. return firebase.auth().signInWithEmailAndPassword(email, password); }) .catch((error) => { // Handle Errors here. var errorCode = error.code; var errorMessage = error.message; });
Spowoduje to zmianę typu trwałości w określonej instancji uwierzytelniania dla aktualnie zapisanej sesji uwierzytelniania i zastosuj ten typ trwałości dla żądań logowania, w tym logowania z żądaniami przekierowania. Dzięki temu zwraca obietnicę, która zostanie zakończona, gdy stan zakończy kopiowanie z jednego z nich lub rodzaj pamięci masowej. Wywołanie metody logowania po zmianie trwałości spowoduje poczekanie na tę zmianę trwałość, aby zakończyć przed zastosowaniem w nowym stanie uwierzytelniania.
Ustawienie domyślne w przypadku przeglądarki i aplikacji natywnych React to local
(pod warunkiem, że
przeglądarka obsługuje ten mechanizm przechowywania, np. pliki cookie/dane innych firm są włączone).
a none
w przypadku aplikacji backendu Node.js.
Omówienie zachowania trwałości
Podczas określania bieżącego stanu zostaną zastosowane następujące kryteria wytrwałość.
- Na początek pakiet SDK sprawdzi, czy istnieje uwierzytelniony użytkownik. O ile
Funkcja
setPersistence
zostanie wywołana, a bieżący typ trwałości użytkownika będzie miał wartość stosowane w przypadku kolejnych prób logowania. Jeśli więc użytkownik był utrwalonysession
na poprzedniej stronie internetowej i odwiedzono nową stronę, zalogowanie się przez innego użytkownika spowoduje, że stan tego użytkownika również zapisane z trwałościąsession
. - Jeśli nie jest zalogowany żaden użytkownik i nie określono trwałości, ustawienie domyślne
zostanie zastosowany (
local
w przeglądarce). - Jeśli żaden użytkownik nie jest zalogowany i ustawiono nowy typ trwałości, wszelka przyszła dla próby zalogowania się będzie stosowany ten typ trwałości.
- Jeśli użytkownik jest zalogowany, a typ trwałości został zmieniony, istniejący zalogowany użytkownik zmieni trwałość na nowego. Wszystkie przyszłe logowania będzie używać tej nowej trwałości.
Po wywołaniu signInWithRedirect jest zachowywany bieżący typ trwałości. i są stosowane na końcu procesu OAuth do nowo zalogowanego użytkownika, nawet jeśli trwałość wyniosła
none
. Jeśli trwałość jest jednoznacznie określona na tej stronie, zastąpi ona zachowano stan uwierzytelniania z poprzedniej strony, która rozpoczęła .Web
import { getAuth, setPersistence, signInWithRedirect, inMemoryPersistence, GoogleAuthProvider } from "firebase/auth"; const auth = getAuth(); setPersistence(auth, inMemoryPersistence) .then(() => { const provider = new GoogleAuthProvider(); // In memory persistence will be applied to the signed in Google user // even though the persistence was set to 'none' and a page redirect // occurred. return signInWithRedirect(auth, provider); }) .catch((error) => { // Handle Errors here. const errorCode = error.code; const errorMessage = error.message; });
Web
firebase.auth().setPersistence(firebase.auth.Auth.Persistence.NONE) .then(() => { var provider = new firebase.auth.GoogleAuthProvider(); // In memory persistence will be applied to the signed in Google user // even though the persistence was set to 'none' and a page redirect // occurred. return firebase.auth().signInWithRedirect(provider); }) .catch((error) => { // Handle Errors here. var errorCode = error.code; var errorMessage = error.message; });
Oczekiwane działanie na różnych kartach przeglądarki
Poniższe oczekiwane działanie będzie stosowane, gdy różne typy trwałości
na różnych kartach. Wymagamy, aby na żadnym etapie
mogą mieć jednocześnie wiele typów zapisanych stanów (np. stan uwierzytelniania zapisany w
session
i local
typ pamięci masowej):
- Użytkownicy mogą logować się z różnymi użytkownikami przy użyciu zasady
session
lubnone
na wielu kartach. Żadna z kart nie widzi stanu drugiej. - Każda próba zalogowania się z wykorzystaniem trwałości funkcji
local
zostanie wykryta i synchronizowany na wszystkich kartach. Jeśli użytkownik był wcześniej zalogowany na określonym za pomocą trwałościsession
lubnone
, stan zostanie wyczyszczony. - Jeśli użytkownik był wcześniej zalogowany za pomocą trwałości funkcji
local
z wieloma karty zostały otwarte, a następnie przełączają się na trwałośćnone
lubsession
w jednej karcie, stan tej karty zostanie zmieniony i użytkownik będzie nadal mieć dostęp dosession
lubnone
oraz na wszystkich pozostałych kartach zostaną wylogowane.