Firebase kullanırken kimlik doğrulama durumunun nasıl devam edeceğini belirtebilirsiniz. JS SDK'sı. Buna, oturum açmış bir kullanıcının açık oturum kapatılıncaya kadar süresiz olarak devam eder, pencere açıldığında temizlenir sayfa yeniden yüklendiğinde kapanıyor veya temizleniyor.
Bir web uygulaması için varsayılan davranış, varsayılan davranış olarak kullanıcının oturumunun, Kullanıcı tarayıcıyı kapattıktan sonra. Kullanıcı ilk olarak aynı web sayfası her ziyaret edildiğinde sürekli olarak oturum açması gerekir. olanak tanır. Bu durumda, kullanıcının şifresini tekrar girmesi ve SMS ile doğrulama vb., kullanıcı deneyimini zorlaştırabilir.
Ancak bu davranışın ideal olmayabileceği durumlar da vardır:
- Hassas verileri olan uygulamalar, pencere açıldığında veya sekme kapalıdır. Kullanıcının oturumu kapatmayı unutması ihtimaline karşı bu önemlidir.
- Birden fazla kullanıcı tarafından paylaşılan bir cihazda kullanılan uygulamalar. Yaygın bir örnek olarak bir kütüphane bilgisayarında çalışan uygulama gösterilmektedir.
- Paylaşılan bir cihazdaki ve birden fazla kullanıcı tarafından erişilebilecek bir uygulama. Geliştirici, söz konusu uygulamaya nasıl erişildiğini belirleyemiyor ve kullanıcıya oturumunu sürdürüp sürdürmeyeceğini seçme olanağı tanır. hakkında bilgi edindiniz. Bu işlem, bir "Beni hatırla" seçeneğini kullanabilirsiniz.
- Geliştirici bazı durumlarda anonim kullanıcının o kullanıcı anonim olmayan bir hesaba (birleştirilmiş, şifre, telefon vb.) kullanabilirsiniz.
- Geliştiriciler, farklı kullanıcıların bir uygulamada oturum açmasına izin vermek isteyebilir farklı sekmelerde kullanabilirsiniz. Varsayılan davranış, durumun sekmeler arasında korunmasıdır aynı kaynak için.
Yukarıda belirtildiği gibi, varsayılan değerin kalıcı olduğu birden çok durum vardır. kalıcılığın geçersiz kılınması gerekebilir.
Desteklenen Yetkilendirme durumu kalıcılığı türleri
Belirli bir cihazdaki Yetkilendirme durumu kalıcılığının üç türünden birini seçebilirsiniz. Uygulamanızın veya kullanıcınızın gereksinimlerine göre Firebase Auth örneği.
Enum | Değer | Açıklama |
---|---|---|
firebase.auth.Auth.Persistence.LOCAL |
"local" | Tarayıcı penceresi açık olsa bile durumun korunacağını gösterir. veya etkinlik React Native'da kaldırılır. Açık bir şekilde kapatma işlemi durumu netleştirmek için gereklidir. Firebase Auth web oturumlarının tek bir ana makine kaynağında geçerlidir ve yalnızca tek bir alan için korunur. |
firebase.auth.Auth.Persistence.SESSION |
"oturum" | Durumun yalnızca mevcut oturumda veya sekmede devam edeceğini belirtir. ve kullanıcının kimliğini doğruladığı sekme veya pencerede silinir. kapalı. Yalnızca web uygulamaları için geçerlidir. |
firebase.auth.Auth.Persistence.NONE |
"hiçbiri" | Durumun yalnızca bellekte depolanacağını ve temizleneceğini belirtir Zaman aralığı veya etkinlik yenilendiğinde. |
Yetkilendirme durumu kalıcılığını değiştirme
Mevcut kalıcılık türünü belirtmek veya değiştirmek için
firebase.auth().setPersistence
yöntem:
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; });
Bu işlem, belirtilen Auth örneğindeki kalıcılık türünü değiştirir şu anda kayıtlı olan Auth oturumu için başlat ve bu tür kalıcılığı isteklerinde bulunur. Bu, devlet bir uygulamadan kopyalamayı bitirdiğinde çözülecek bir söz ver diğere binebilir. Kalıcılığı değiştirdikten sonra bir oturum açma yöntemi çağrıldığında bunun için beklenir yeni Yetkilendirme durumunda uygulanmadan önce tamamlanması için kalıcı değişiklik yapmanız gerekir.
Web tarayıcısı ve React Yerel uygulamaları için varsayılan ayar local
şeklindedir (
tarayıcı bu depolama mekanizmasını destekliyor, ör. 3. taraf çerezleri/verileri etkinse
Node.js arka uç uygulamaları için ise none
şeklindedir.
Kalıcı davranışa genel bakış
Projenin mevcut durumu belirlenirken aşağıdaki kriterler uygulanır sebat gösterir.
- Başlangıçta SDK, kimliği doğrulanmış bir kullanıcının olup olmadığını kontrol eder. Aksi hâlde
setPersistence
çağrılır. Bu kullanıcının mevcut kalıcılık türü şu şekilde olur: sonraki oturum açma denemeleri için uygulanır. Kullanıcı aynı zamanda Önceki bir web sayfasındasession
ve yeni bir sayfa ziyaret edildi, oturum açtığınızda, söz konusu kullanıcının durumu,session
kalıcı olarak kaydedildi. - Hiçbir kullanıcı oturum açmadıysa ve kalıcılık belirtilmezse varsayılan ayar
(tarayıcı uygulamasında
local
) uygulanır. - Hiçbir kullanıcı oturum açmadıysa ve yeni bir kalıcılık türü ayarlanmışsa gelecekteki tüm oturum açma girişiminde bu tür bir kalıcılık kullanılır.
- Kullanıcı oturum açtıysa ve kalıcılık türü değiştirilirse mevcut oturum açmış olan kullanıcının kalıcılığı yeni kullanıcı ile değiştirilir. Gelecekteki tüm oturum açma işlemleri tecrübeleri de bu yeni sebat kullanır.
signInWithRedirect çağrıldığında, mevcut kalıcılık türü korunur. ve OAuth akışının sonunda, yeni oturum açmış kullanıcıya uygulanır. kalıcılık
none
değerindeydi. Kalıcılık bu sayfada açıkça belirtilirse başlatan önceki sayfadaki kimlik doğrulama durumu kalıcılığı korundu yönlendirme akışı.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; });
Tarayıcı sekmelerinde beklenen davranış
Farklı kalıcılık türleri olduğunda aşağıdaki beklenen davranış geçerli olur
farklı sekmelerde kullanılıyor. Sözleşmenin şartları ne olursa olsun, hiçbir zaman
aynı anda birden fazla kayıtlı durum olabilir (ör.
session
ve local
depolama alanı türleri):
- Kullanıcılar, farklı kullanıcılarla
session
veyanone
seminerini kullanarak oturum açabilir birden çok sekmede açabilirsiniz. Her sekme diğer sekmenin durumunu göremez. local
kalıcılığı kullanarak oturum açma girişimleri algılanır ve senkronize edilir. Kullanıcı daha önce belirli birsession
veyanone
kalıcılığını kullanan bir sekme görürseniz bu durum silinir.- Kullanıcı daha önce birden fazla oturum için
local
kalıcılığını kullanarak oturum açmışsa sonra açılır ve daha sonra bir sekmedenone
veyasession
kalıcılığına geçerse söz konusu sekmenin durumu, kullanıcısession
veyanone
ve diğer tüm sekmelerde kullanıcının oturumu kapatılır.