Firebase JS SDK'sını kullanırken kimlik doğrulama durumunun nasıl devam edeceğini belirtebilirsiniz. Bu, oturum açmış bir kullanıcının açık oturumu kapatana kadar süresiz olarak devam edip etmeyeceğini, pencere kapatıldığında veya sayfa yeniden yüklendiğinde temizlenip temizlenmeyeceğini belirtme olanağı da içerir.
Web uygulamaları için varsayılan davranış, kullanıcı tarayıcıdan çıktıktan sonra bile kullanıcı oturumunun devam etmesini sağlamaktır. Bu, kullanıcının web sayfası aynı cihazda her ziyaret edildiğinde sürekli olarak oturum açması gerekmediğinden kullanışlıdır. Bu durumda kullanıcının şifresini yeniden girmesi, SMS doğrulaması göndermesi vb. gerekebilir. Bu da kullanıcı deneyimine çok fazla sorun ekleyebilir.
Ancak bu davranışın ideal olmayabileceği durumlar da vardır:
- Hassas verileri olan uygulamalar, pencere veya sekme kapatıldığında durumu temizlemek isteyebilir. Bu, kullanıcının oturumu kapatmayı unutması ihtimaline karşı önemlidir.
- Birden fazla kullanıcı tarafından paylaşılan bir cihazda kullanılan uygulamalar. Kütüphane bilgisayarında çalışan bir uygulama, bu duruma örnek olarak verilebilir.
- Paylaşılan bir cihazda birden fazla kullanıcının erişebileceği bir uygulama. Geliştirici, söz konusu uygulamaya nasıl erişildiğini bilemez ve kullanıcıya oturumunu devam ettirip ettirmeyeceğini seçme olanağı sunmak isteyebilir. Bu işlem, oturum açma sırasında "Beni hatırla" seçeneği ekleyerek yapılabilir.
- Bazı durumlarda geliştiriciler, anonim kullanıcının anonim olmayan bir hesaba (federe, şifre, telefon vb.) yükseltilmesine kadar kalıcı olarak saklanmamasını isteyebilir.
- Geliştiriciler, farklı kullanıcıların farklı sekmelerde bir uygulamada oturum açmasına izin vermek isteyebilir. Varsayılan davranış, aynı kaynak için sekmeler arasında durumu korumaktır.
Yukarıda belirtildiği gibi, varsayılan kalıcı kalıcılığın geçersiz kılınması gereken birden fazla durum vardır.
Desteklenen kimlik doğrulama durumu devamlılık türleri
Belirli bir Firebase Auth örneğinde, uygulamanıza veya kullanıcınızın gereksinimlerine göre üç Auth durumu devamlılık türünden birini seçebilirsiniz.
Enum | Değer | Açıklama |
---|---|---|
firebase.auth.Auth.Persistence.LOCAL |
'local' | Tarayıcı penceresi kapalıyken veya React Native'de etkinlik yok edildiğinde bile durumun devam edeceğini belirtir. Bu durumu temizlemek için açık bir şekilde oturum kapatmanız gerekir. Firebase Auth web oturumlarının tek ana makine kaynağına sahip olduğunu ve yalnızca tek bir alan için devam ettirileceğini unutmayın. |
firebase.auth.Auth.Persistence.SESSION |
'session' | Durum bilgisinin yalnızca geçerli oturumda veya sekmede kalacağını ve kullanıcının kimlik doğrulamasını yaptığı sekme veya pencere kapatıldığında temizleneceğini belirtir. Yalnızca web uygulamaları için geçerlidir. |
firebase.auth.Auth.Persistence.NONE |
'none' | Durumun yalnızca bellekte depolanacağını ve pencere veya etkinlik yenilendiğinde temizleneceğini gösterir. |
Kimlik doğrulama durumu kalıcılığının değiştirilmesi
firebase.auth().setPersistence
yöntemini çağırarak mevcut kalıcılık türünü belirtebilir veya değiştirebilirsiniz:
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, şu anda kayıtlı Auth oturumu için belirtilen Auth örneğinde kalıcılık türünü değiştirir ve yönlendirme istekleriyle oturum açma dahil olmak üzere gelecekteki oturum açma isteklerine bu kalıcılık türünü uygular. Bu işlem, bir depolama alanından diğerine kopyalama işlemi tamamlandığında çözülecek bir promise döndürür. Kayıtlı kalma özelliğini değiştirdikten sonra bir oturum açma yöntemi çağrıldığında, bu kayıtlı kalma değişikliği yeni kimlik doğrulama durumuna uygulanmadan önce tamamlanır.
Web tarayıcısı ve React Native uygulamaları için varsayılan değer local
'tür (tarayıcının bu depolama mekanizmasını desteklemesi gerekir, ör. 3. taraf çerezleri/verileri etkinleştirilir) iken Node.js arka uç uygulamaları için none
olur.
Kalıcılık davranışına genel bakış
Kalıcılığın mevcut durumu belirlenirken aşağıdaki ölçütler uygulanır.
- SDK ilk olarak kimliği doğrulanmış bir kullanıcı olup olmadığını kontrol eder.
setPersistence
çağrılmadığı sürece, gelecekteki oturum açma girişimleri için söz konusu kullanıcının mevcut kalıcılık türü uygulanır. Bu nedenle, söz konusu kullanıcı önceki bir web sayfasındasession
olarak kalıcı hale getirildiyse ve yeni bir sayfa ziyaret edildiyse farklı bir kullanıcıyla tekrar oturum açıldığında bu kullanıcının durumu dasession
olarak kalıcı hale getirilir. - Hiçbir kullanıcı oturum açmamışsa ve devamlılık belirtilmemişse varsayılan ayar uygulanır (tarayıcı uygulamasında
local
). - Hiçbir kullanıcı oturum açmamışsa ve yeni bir devamlılık türü ayarlandıysa gelecekteki tüm oturum açma denemelerinde bu devamlılık türü kullanılır.
- Kullanıcı oturum açtıysa ve devamlılık türü değiştirilirse oturum açmış mevcut kullanıcı, devamlılığı yeni türe değiştirir. Gelecekteki tüm oturum açma denemelerinde bu yeni kalıcılık kullanılır.
signInWithRedirect çağrıldığında, geçerli kalıcılık türü korunur ve kalıcılık
none
olsa bile OAuth akışının sonunda yeni oturum açmış kullanıcıya uygulanır. Bu sayfada açıkça belirtilmişse yönlendirme akışını başlatan önceki sayfadaki kalıcı kimlik doğrulama durumu özelliğini geçersiz kılar.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ı sekmelerde farklı kalıcılık türleri kullanıldığında aşağıdaki beklenen davranış geçerli olur. Şart, hiçbir zaman aynı anda birden fazla türde kayıtlı durum olmamasıdır (ör. session
ve local
depolama türlerinde kayıtlı kimlik doğrulama durumu):
- Kullanıcılar, birden fazla sekmede farklı kullanıcılarla
session
veyanone
sürekliliği kullanarak oturum açabilir. Her sekme, diğer sekmenin durumunu göremez. local
sürekliliği kullanılarak yapılan tüm oturum açma girişimleri tespit edilir ve tüm sekmelerde senkronize edilir. Kullanıcı daha öncesession
veyanone
sürekliliği kullanılarak belirli bir sekmede oturum açtıysa bu durum temizlenir.- Kullanıcı daha önce birden fazla sekme açıkken
local
devamlılık özelliğini kullanarak oturum açtıysa ve ardından tek bir sekmedenone
veyasession
devamlılığına geçtiyse söz konusu sekmenin durumu, kullanıcısession
veyanone
'de devamlı olarak kalacak şekilde değiştirilir ve diğer tüm sekmelerde kullanıcının oturumu kapatılır.