Kimlik Doğrulama Durumunun Kalıcılığı

Firebase JS SDK'yı kullanırken Kimlik Doğrulama durumunun nasıl devam edeceğini belirtebilirsiniz. Bu, oturum açmış bir kullanıcının açık oturum kapatılıncaya kadar süresiz olarak devam ettirilip ettirilmeyeceğini, pencere kapatıldığında silinip silinmeyeceğini veya sayfa yeniden yüklendiğinde silinip silinmeyeceğini belirtme yeteneğini içerir.

Bir web uygulaması için varsayılan davranış, kullanıcı tarayıcıyı kapattıktan sonra bile kullanıcının oturumunu sürdürmektir. Kullanıcının, web sayfası aynı cihazda her ziyaret edildiğinde sürekli olarak oturum açması gerekmediği için bu kullanışlıdır. Bu, kullanıcının şifresini yeniden girmesini, SMS doğrulaması göndermesini vb. gerektirebilir ve bu da kullanıcı deneyimine çok fazla sorun katabilir.

Ancak bu davranışın ideal olmayabileceği durumlar da vardır:

  • Hassas verilere sahip uygulamalar, pencere veya sekme kapatıldığında durumu temizlemek isteyebilir. Kullanıcının oturumu kapatmayı unutması durumunda bu önemlidir.
  • Birden fazla kullanıcı tarafından paylaşılan bir cihazda kullanılan uygulamalar. Buradaki yaygın bir örnek, kütüphane bilgisayarında çalışan bir uygulamadır.
  • Paylaşılan bir cihazda birden fazla kullanıcının erişebileceği bir uygulama. Geliştirici, bu uygulamaya nasıl erişildiğini söyleyemez ve kullanıcıya, oturumunu sürdürüp sürdürmeyeceğini seçme olanağı sağlamak isteyebilir. Bu, oturum açma sırasında "Beni hatırla" seçeneği eklenerek yapılabilir.
  • Bazı durumlarda geliştirici, kullanıcı anonim olmayan bir hesaba (birleşik, şifre, telefon vb.) yükseltilinceye kadar anonim bir kullanıcıyı sürdürmemek isteyebilir.
  • Bir geliştirici, farklı kullanıcıların bir uygulamada farklı sekmelerde oturum açmasına izin vermek isteyebilir. Varsayılan davranış, aynı kaynak için sekmeler arasında durumu sürdürmektir.

Yukarıda belirtildiği gibi, varsayılan kalıcı kalıcılığın geçersiz kılınmasının gerekebileceği birden fazla durum vardır.

Desteklenen Kimlik Doğrulama durumu kalıcılığı türleri

Uygulamanıza veya kullanıcının gereksinimlerine göre belirli bir Firebase Auth örneğinde üç tür Kimlik Doğrulama durumu kalıcılığından birini seçebilirsiniz.

Sıralama Değer Tanım
firebase.auth.Auth.Persistence.LOCAL 'yerel' React Native'de tarayıcı penceresi kapatıldığında veya etkinlik yok edildiğinde bile durumun kalıcı olacağını belirtir. Bu durumu temizlemek için açık bir oturum kapatma işlemi yapılması gerekir. Firebase Auth web oturumlarının tek ana makine kaynaklı olduğunu ve yalnızca tek bir alan adı için kalıcı olacağını unutmayın.
firebase.auth.Auth.Persistence.SESSION 'oturum' Durumun yalnızca geçerli oturumda veya sekmede devam edeceğini ve kullanıcının kimliğinin doğrulandığı sekme veya pencere kapatıldığında silineceğini belirtir. Yalnızca web uygulamaları için geçerlidir.
firebase.auth.Auth.Persistence.NONE 'hiçbiri' Durumun yalnızca bellekte saklanacağını ve pencere veya etkinlik yenilendiğinde silineceğini belirtir.

Kimlik doğrulama durumu kalıcılığını değiştirme

firebase.auth().setPersistence yöntemini çağırarak mevcut kalıcılık türünü belirtebilir veya değiştirebilirsiniz:

Web modular API

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 namespaced API

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, halihazırda kayıtlı olan Kimlik Doğrulama oturumu için belirtilen Kimlik Doğrulama örneğindeki kalıcılık türünü değiştirecek ve yönlendirme istekleriyle oturum açma dahil olmak üzere gelecekteki oturum açma istekleri için bu kalıcılık türünü uygulayacaktır. Bu, durum bir depolama türünden diğerine kopyalamayı bitirdiğinde çözülecek bir söz döndürecektir. Kalıcılığı değiştirdikten sonra bir oturum açma yönteminin çağrılması, yeni Kimlik Doğrulama durumuna uygulanmadan önce kalıcılık değişikliğinin tamamlanmasını bekleyecektir.

Web tarayıcısı ve React Native uygulamaları için varsayılan local (tarayıcının bu depolama mekanizmasını desteklemesi, örneğin 3. taraf çerezlerin/verilerin etkin olması şartıyla) ancak Node.js arka uç uygulamaları için none .

Kalıcılık davranışına genel bakış

Mevcut kalıcılık durumu belirlenirken aşağıdaki kriterler uygulanacaktır.

  • Başlangıçta SDK, kimliği doğrulanmış bir kullanıcının mevcut olup olmadığını kontrol edecektir. setPersistence çağrılmadığı sürece, o kullanıcının geçerli kalıcılık türü gelecekteki oturum açma denemelerinde uygulanacaktır. Dolayısıyla, eğer bu kullanıcı önceki bir web sayfasındaki session ısrarcıysa ve yeni bir sayfa ziyaret edildiyse, farklı bir kullanıcıyla tekrar oturum açmak, o kullanıcının durumunun da session kalıcılığıyla kaydedilmesiyle sonuçlanacaktır.
  • Hiçbir kullanıcı oturum açmadıysa ve kalıcılık belirtilmediyse varsayılan ayar uygulanacaktır (tarayıcı uygulamasında local ).
  • Hiçbir kullanıcı oturum açmadıysa ve yeni bir kalıcılık türü ayarlandıysa, gelecekteki tüm oturum açma denemeleri bu kalıcılık türünü kullanacaktır.
  • Kullanıcı oturum açmışsa ve kalıcılık türü değiştirilirse, oturum açmış olan mevcut kullanıcı kalıcılığı yenisiyle değiştirecektir. Gelecekteki tüm oturum açma denemeleri bu yeni kalıcılığı kullanacaktır.
  • SignInWithRedirect çağrıldığında, kalıcılık none olsa bile geçerli kalıcılık türü korunur ve OAuth akışının sonunda yeni oturum açan kullanıcıya uygulanır. Kalıcılık o sayfada açıkça belirtilirse, yönlendirme akışını başlatan önceki sayfadaki tutulan kimlik doğrulama durumu kalıcılığını geçersiz kılar.

    Web modular API

    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 namespaced API

    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 olacaktır. Gereklilik, herhangi bir noktada aynı anda birden fazla kayıtlı durum türünün olmamasıdır (örneğin, session kayıtlı kimlik doğrulama durumu ve local depolama türleri):

  • Kullanıcılar, birden fazla sekmede farklı kullanıcılarla session kullanarak veya kalıcılık none oturum açabilir. Her sekme diğer sekmenin durumunu göremez.
  • local kalıcılığı kullanarak herhangi bir oturum açma girişimi algılanacak ve tüm sekmelerde senkronize edilecektir. Kullanıcı daha önce belirli bir sekmede session kullanarak veya kalıcılık none oturum açtıysa bu durum temizlenir.
  • Kullanıcı daha önce birden fazla sekme açıkken local kalıcılığı kullanarak oturum açtıysa ve ardından bir sekmede none veya session kalıcılığına geçerse, o sekmenin durumu, kullanıcının session ısrar etmesi veya none ve diğer tüm sekmelerde, kullanıcı olarak değiştirilecektir. oturum kapatılacak.