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

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ında session 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 veya none 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 bir session veya none 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 sekmede none veya session kalıcılığına geçerse söz konusu sekmenin durumu, kullanıcı session veya none ve diğer tüm sekmelerde kullanıcının oturumu kapatılır.