Google 致力于为黑人社区推动种族平等。查看具体举措

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

Firebase JS SDK'sını kullanırken Kimlik Doğrulama durumunun nasıl devam edeceğini belirleyebilirsiniz. Bu, oturum açmış bir kullanıcının açık bir şekilde oturum kapatılıncaya kadar süresiz olarak devam ettirilip ettirilmeyeceğini, pencere kapatıldığında temizlenip temizlenmeyeceğini veya sayfanın yeniden yüklenmesi sırasında temizlenip temizlenmeyeceğini belirleme 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. 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, kullanıcının parolasını yeniden girmesini, bir SMS doğrulaması göndermesini vb. gerektirebilir, bu da kullanıcı deneyimine çok fazla sürtüşme katabilir.

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

  • Hassas verilere sahip uygulamalar, pencere veya sekme kapatıldığında durumu temizlemek isteyebilir. Bu, kullanıcının oturumu kapatmayı unutması durumunda önemlidir.
  • Birden çok kullanıcı tarafından paylaşılan bir cihazda kullanılan uygulamalar. Burada yaygın bir örnek, bir kitaplık bilgisayarında çalışan bir uygulamadır.
  • Paylaşılan bir cihazda birden çok kullanıcı tarafından erişilebilen bir uygulama. Geliştirici, bu uygulamaya nasıl erişildiğini söyleyemez ve bir kullanıcıya oturumunu devam ettirip ettirmemeyi seçme yeteneği sağlamak isteyebilir. Bu, oturum açma sırasında "Beni hatırla" seçeneği eklenerek yapılabilir.
  • Bazı durumlarda geliştirici, bu kullanıcı anonim olmayan bir hesaba (federe, parola, telefon vb.) yükseltilene kadar anonim bir kullanıcıyı kalıcı kılmak isteyebilir.
  • Bir geliştirici, farklı kullanıcıların farklı sekmelerde bir uygulamada oturum açmasına izin vermek isteyebilir. Varsayılan davranış, durumu aynı kaynak için sekmeler arasında 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 çok durum vardır.

Desteklenen Auth durumu kalıcılığı türleri

Uygulamanıza veya kullanıcı gereksinimlerinize göre, belirtilen bir Firebase Auth örneğinde üç tür Yetkilendirme 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 aktivite yok edildiğinde bile durumun kalıcı olacağını belirtir. Bu durumu temizlemek için açık bir çıkış yapılması gerekir. Firebase Auth web oturumlarının tek ana bilgisayar kaynaklı olduğunu ve yalnızca tek bir etki alanı için kalıcı olacağını unutmayın.
firebase.auth.Auth.Persistence.SESSION 'oturum, toplantı, celse' Durumun yalnızca geçerli oturumda veya sekmede kalıcı olacağını 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 'Yok' Durumun yalnızca bellekte saklanacağını ve pencere veya etkinlik yenilendiğinde silineceğini belirtir.

Yetkilendirme durumu kalıcılığını değiştirme

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

Web version 9

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 version 8

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, şu anda kayıtlı olan Yetkilendirme oturumu için belirtilen Yetkilendirme örneğindeki kalıcılık türünü değiştirecek ve yeniden yönlendirme istekleriyle oturum açma dahil olmak üzere gelecekteki oturum açma istekleri için bu tür kalıcılığı uygulayacaktır. Bu, durum bir depolama türünden diğerine kopyalamayı bitirdiğinde çözülecek bir söz verecektir. Kalıcılığı değiştirdikten sonra bir oturum açma yönteminin çağrılması, yeni Yetkilendirme durumuna uygulanmadan önce bu 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 koşuluyla, örn. 3. taraf tanımlama bilgileri/verileri etkinleştirilirse), none arka uç uygulamaları için yereldir.

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 olup olmadığını kontrol edecektir. setPersistence çağrılmadığı sürece, gelecekteki oturum açma girişimleri için o kullanıcının mevcut kalıcılık türü uygulanacaktır. Dolayısıyla, bu kullanıcı önceki bir web sayfasındaki session ısrar ettiyse 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ığı ile kaydedilmesine neden olacaktır.
  • Hiçbir kullanıcı oturum açmadıysa ve kalıcılık belirtilmediyse, varsayılan ayar uygulanacaktır (bir tarayıcı uygulamasında local ).
  • Hiçbir kullanıcı oturum açmadıysa ve yeni bir kalıcılık türü ayarlanmışsa, gelecekteki herhangi bir oturum açma girişimi bu tür kalıcılığı kullanacaktır.
  • Kullanıcı oturum açtıysa ve kalıcılık türü değiştirilirse, oturum açmış olan mevcut kullanıcı kalıcılığı yenisiyle değiştirir. Gelecekteki tüm oturum açma girişimleri bu yeni kalıcılığı kullanacaktır.
  • signInWithRedirect çağrıldığında, geçerli kalıcılık türü korunur ve kalıcılık none olsa bile, yeni oturum açan kullanıcıya OAuth akışının sonunda uygulanır. Kalıcılık o sayfada açıkça belirtilirse, yeniden yönlendirme akışını başlatan önceki sayfadaki tutulan kimlik doğrulama durumu kalıcılığını geçersiz kılar.

    Web version 9

    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 version 8

    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, asla aynı anda birden fazla kaydedilmiş durum türü olmamasıdır (örn. session kaydedilen auth durumu ve local depolama türleri):

  • Kullanıcılar, birden çok sekmede farklı kullanıcılarla session veya none kullanarak oturum açabilir. Her sekme diğer sekmenin durumunu göremez.
  • local kalıcılığı kullanarak herhangi bir oturum açma girişimi, tüm sekmelerde algılanacak ve senkronize edilecektir. Kullanıcı daha önce belirli bir sekmede session veya kalıcılık none kullanarak oturum açmışsa, bu durum temizlenecektir.
  • Kullanıcı daha önce birden çok sekme açıkken local kalıcılık kullanarak oturum açtıysa ve ardından bir sekmede none veya session kalıcılığına geçerse, bu sekmenin durumu, kullanıcı session veya none kalıcı olacak şekilde ve diğer tüm sekmelerde kullanıcı çıkış yapılacaktır.