Authentifizierungsstatus dauerhaft speichern

Sie können festlegen, wie der Authentifizierungsstatus bei Verwendung der Firebase- JS SDK verwenden. Dazu gehört auch die Möglichkeit anzugeben, ob ein angemeldeter Nutzer werden bis zur expliziten Abmeldung unbegrenzt beibehalten. Sie werden gelöscht, wenn das Fenster wieder aktiviert wird. geschlossen oder beim Aktualisieren der Seite gelöscht.

Bei einer Webanwendung wird die Sitzung des Nutzers standardmäßig auch dann nachdem der Nutzer den Browser geschlossen hat. Das ist praktisch, da die Nutzenden müssen sich jedes Mal neu anmelden, wenn die Webseite auf einem . Dies kann dazu führen, dass der Nutzer sein Passwort noch einmal eingeben oder eine SMS-Bestätigung senden muss, was die Nutzerfreundlichkeit erheblich beeinträchtigen kann.

Es gibt jedoch Fälle, in denen dieses Verhalten nicht ideal ist:

  • Bei Anwendungen mit sensiblen Daten sollte der Status gelöscht werden, wenn das Fenster oder der Tab geschlossen wird. Das ist wichtig für den Fall, dass der Nutzer vergisst, sich abzumelden.
  • Apps, die auf einem Gerät verwendet werden, das von mehreren Nutzern gemeinsam genutzt wird. Eine gemeinsame Hier ein Beispiel für eine App, die auf einem Bibliothekscomputer ausgeführt wird.
  • Eine Anwendung auf einem gemeinsam genutzten Gerät, auf die mehrere Nutzer zugreifen können. Der Entwickler weiß nicht, wie auf diese App zugegriffen wird, und möchte um dem Nutzer die Möglichkeit zu geben, festzulegen, ob seine Sitzung oder nicht. Fügen Sie dazu einfach eine bei der Anmeldung aktivieren.
  • Es kann vorkommen, dass ein Entwickler anonyme Nutzer bis dieser Nutzer auf ein nicht anonymes Konto (Föderiertes, Passwort, Telefon usw.).
  • Ein Entwickler kann verschiedenen Nutzern erlauben, sich bei einer Anwendung anzumelden auf verschiedenen Tabs. Standardmäßig wird der Status auf allen Tabs beibehalten. für denselben Ursprung.

Wie bereits erwähnt, gibt es mehrere Situationen, in denen die standardmäßige dauerhafte Persistenz möglicherweise überschrieben werden muss.

Unterstützte Typen der Authentifizierungsstatus-Persistenz

Sie können für eine bestimmte Firebase Auth-Instanz einen der drei Typen der Authentifizierungsstatusspeicherung auswählen, je nach den Anforderungen Ihrer Anwendung oder Nutzer.

Enum Wert Beschreibung
firebase.auth.Auth.Persistence.LOCAL 'lokal' Gibt an, dass der Status beibehalten wird, auch wenn sich das Browserfenster geschlossen oder die Aktivität wird in React Native gelöscht. Explizite Abmeldung um diesen Zustand zu löschen. Firebase Auth-Websitzungen sind Ursprung eines einzelnen Hosts und wird nur für eine einzelne Domain beibehalten.
firebase.auth.Auth.Persistence.SESSION „session“ (Sitzung) Gibt an, dass der Status nur in der aktuellen Sitzung oder im aktuellen Tab beibehalten wird und gelöscht wird, wenn der Tab oder das Fenster, in dem sich der Nutzer authentifiziert hat, geschlossen wird. Gilt nur für Web-Apps.
firebase.auth.Auth.Persistence.NONE „none“ Gibt an, dass der Status nur im Arbeitsspeicher gespeichert und gelöscht wird wenn das Fenster oder die Aktivität aktualisiert wird.

Persistenz des Auth-Status ändern

Sie können den vorhandenen Persistenztyp angeben oder ändern, indem Sie die Methode firebase.auth().setPersistence-Methode:

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;
  });

Dadurch wird die Art der Persistenz in der angegebenen Auth-Instanz für die aktuell gespeicherte Auth-Sitzung geändert und diese Art der Persistenz wird auf zukünftige Anmeldeanfragen angewendet, einschließlich Anmeldeanfragen mit Weiterleitung. Dadurch wird ein Promise zurückgeben, das aufgelöst wird, sobald der Status das Kopieren von einem Speichertyp zum anderen. Wenn Sie nach dem Ändern der Persistenz eine Anmeldemethode aufrufen, wird darauf gewartet Persistenzänderung abzuschließen, bevor sie auf den neuen Authentifizierungsstatus angewendet wird.

Die Standardeinstellung für Webbrowser und native React-Apps ist local (sofern die Browser unterstützt diesen Speichermechanismus, z. B. Drittanbieter-Cookies/-Daten sind aktiviert.) für Node.js-Back-End-Anwendungen none.

Übersicht über das Persistenzverhalten

Bei der Bestimmung des aktuellen Status der Persistenz werden die folgenden Kriterien angewendet.

  • Zuerst prüft das SDK, ob ein authentifizierter Nutzer vorhanden ist. Sofern setPersistence nicht aufgerufen wird, wird der aktuelle Speichertyp dieses Nutzers für zukünftige Anmeldeversuche angewendet. Wenn dieser Nutzer also auf einer vorherigen Webseite in session gespeichert wurde und eine neue Seite besucht wurde, wird der Status dieses Nutzers bei der erneuten Anmeldung mit einem anderen Nutzer ebenfalls mit session-Persistenz gespeichert.
  • Wenn kein Nutzer angemeldet ist und keine Persistenz festgelegt ist, ist die Standardeinstellung angewendet wird (local in einer Browser-App).
  • Wenn kein Nutzer angemeldet ist und ein neuer Typ der Persistenz festgelegt wird, wird bei allen zukünftigen Anmeldeversuchen dieser Typ verwendet.
  • Wenn der Nutzer angemeldet ist und der Persistenztyp geändert wird, angemeldeter Nutzer ändert die Persistenz auf die neue Persistenz. Alle zukünftigen Anmeldungen wird diese neue Persistenz verwendet.
  • Wenn „signInWithRedirect“ aufgerufen wird, wird der aktuelle Speichertyp beibehalten und am Ende des OAuth-Ablaufs auf den neu angemeldeten Nutzer angewendet, auch wenn die Persistenz none war. Wenn die Persistenz auf dieser Seite explizit angegeben wird, wird die Methode Beibehalten des Authentifizierungsstatus von der vorherigen Seite, die den weitergeleitet werden.

    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;
      });

Erwartetes Verhalten auf Browser-Tabs

Das folgende erwartete Verhalten gilt, wenn verschiedene Persistenztypen: die auf verschiedenen Tabs verwendet werden. Es dürfen nie mehrere Arten von gespeicherten Status gleichzeitig vorhanden sein (z. B. Authentifizierungsstatus, der in session- und local-Speichertypen gespeichert ist):

  • Nutzer können sich mit session- oder none-Persistenz für verschiedene Nutzer anmelden auf mehreren Tabs. Jeder Tab kann nicht den Status des anderen Tabs sehen.
  • Jeder Anmeldeversuch mit local-Persistenz wird erkannt und auf allen Tabs synchronisiert. Wenn der Nutzer zuvor auf einem bestimmten Gerät angemeldet war, Tab mit der Persistenz session oder none verwenden, wird dieser Status gelöscht.
  • Wenn der Nutzer zuvor mit local-Persistenz mit mehreren Tabs geöffnet und dann auf einem Tab in die Persistenz none oder session gewechselt wird, wird der Status dieses Tabs geändert und der Nutzer bleibt „session“ oder „none“ und auf allen anderen Tabs wird der Nutzer abgemeldet.