Uwierzytelnianie w Firebase za pomocą anonimowego JavaScriptu

Dzięki Uwierzytelnianiu Firebase możesz tworzyć tymczasowe anonimowe konta i używać ich do uwierzytelniania w Firebase. Te tymczasowe anonimowe konta mogą umożliwiać użytkownikom, którzy nie zarejestrowali się jeszcze w Twojej aplikacji, na pracę z danymi chronionymi przez reguły zabezpieczeń. Jeśli anonimowy użytkownik zdecyduje się zarejestrować w Twojej aplikacji, możesz połączyć jego dane logowania z anonimowym kontem, aby mógł nadal korzystać ze swoich chronionych danych w kolejnych sesjach.

Zanim zaczniesz

  1. Dodaj Firebase do projektu JavaScript.
  2. Jeśli Twoja aplikacja nie jest jeszcze połączona z projektem Firebase, możesz to zrobić z poziomu konsoli Firebase.
  3. Włącz anonimowe uwierzytelnianie:
    1. W konsoli Firebase otwórz sekcję Uwierzytelnianie.
    2. Na stronie Metody logowania włącz metodę logowania Anonimowy.
    3. Opcjonalnie: jeśli Twój projekt został przeniesiony na Uwierzytelnianie Firebase na platformie Identity Platform, możesz włączyć automatyczne czyszczenie. Gdy włączysz to ustawienie, anonimowe konta starsze niż 30 dni będą automatycznie usuwane. W projektach z włączonym automatycznym czyszczeniem anonimowe uwierzytelnianie nie będzie już wliczane do limitów wykorzystania ani limitów płatności. Zobacz Automatyczne czyszczenie.

Uwierzytelniaj anonimowo w Firebase

Gdy wylogowany użytkownik używa funkcji aplikacji, która wymaga uwierzytelniania w Firebase, zaloguj się anonimowo, wykonując te czynności:

  1. Wywołaj metodę signInAnonymously:

    Web Modular API

    import { getAuth, signInAnonymously } from "firebase/auth";
    
    const auth = getAuth();
    signInAnonymously(auth)
      .then(() => {
        // Signed in..
      })
      .catch((error) => {
        const errorCode = error.code;
        const errorMessage = error.message;
        // ...
      });

    Interfejs API internetowej przestrzeni nazw

    firebase.auth().signInAnonymously()
      .then(() => {
        // Signed in..
      })
      .catch((error) => {
        var errorCode = error.code;
        var errorMessage = error.message;
        // ...
      });
    Możesz w nim też wykrywać i poprawiać błędy. Listę kodów błędów znajdziesz w dokumentacji referencyjnej uwierzytelniania.
  2. Jeśli metoda signInAnonymously zakończy się bez błędu, aktywuje się obserwator zarejestrowany w onAuthStateChanged i będzie można pobrać dane anonimowego konta użytkownika z obiektu User:

    Web Modular API

    import { getAuth, onAuthStateChanged } from "firebase/auth";
    
    const auth = getAuth();
    onAuthStateChanged(auth, (user) => {
      if (user) {
        // User is signed in, see docs for a list of available properties
        // https://firebase.google.com/docs/reference/js/auth.user
        const uid = user.uid;
        // ...
      } else {
        // User is signed out
        // ...
      }
    });

    Interfejs API internetowej przestrzeni nazw

    firebase.auth().onAuthStateChanged((user) => {
      if (user) {
        // User is signed in, see docs for a list of available properties
        // https://firebase.google.com/docs/reference/js/v8/firebase.User
        var uid = user.uid;
        // ...
      } else {
        // User is signed out
        // ...
      }
    });

Przekształcanie konta anonimowego w konto stałe

Gdy anonimowy użytkownik zarejestruje się w Twojej aplikacji, możesz zezwolić mu na kontynuowanie pracy na nowym koncie – np. możesz udostępnić produkty dodane przez tego użytkownika do koszyka, zanim się zarejestruje w koszyku na nowe konto. Aby to zrobić:

  1. Gdy użytkownik się zarejestruje, przeprowadź proces logowania u dostawcy uwierzytelniania użytkownika aż do wywołania jednej z metod Auth.signInWith (ale bez niego). Możesz na przykład uzyskać token identyfikatora Google użytkownika, token dostępu Facebooka lub adres e-mail i hasło.
  2. Pobierz AuthCredential dla nowego dostawcy uwierzytelniania:

    Logowanie przez Google

    Web Modular API

    import { GoogleAuthProvider } from "firebase/auth";
    
    const credential = GoogleAuthProvider.credential(
      googleUser.getAuthResponse().id_token);

    Interfejs API internetowej przestrzeni nazw

    var credential = firebase.auth.GoogleAuthProvider.credential(
      googleUser.getAuthResponse().id_token);
    Logowanie do Facebooka

    Web Modular API

    import { FacebookAuthProvider } from "firebase/auth";
    
    const credential = FacebookAuthProvider.credential(
      response.authResponse.accessToken);

    Interfejs API internetowej przestrzeni nazw

    var credential = firebase.auth.FacebookAuthProvider.credential(
      response.authResponse.accessToken);
    Logowanie się za pomocą adresu e-mail

    Web Modular API

    import { EmailAuthProvider } from "firebase/auth";
    
    const credential = EmailAuthProvider.credential(email, password);

    Interfejs API internetowej przestrzeni nazw

    var credential = firebase.auth.EmailAuthProvider.credential(email, password);
  3. Przekaż obiekt AuthCredential do metody link zalogowanego użytkownika:

    Web Modular API

    import { getAuth, linkWithCredential } from "firebase/auth";
    
    const auth = getAuth();
    linkWithCredential(auth.currentUser, credential)
      .then((usercred) => {
        const user = usercred.user;
        console.log("Anonymous account successfully upgraded", user);
      }).catch((error) => {
        console.log("Error upgrading anonymous account", error);
      });

    Interfejs API internetowej przestrzeni nazw

    auth.currentUser.linkWithCredential(credential)
      .then((usercred) => {
        var user = usercred.user;
        console.log("Anonymous account successfully upgraded", user);
      }).catch((error) => {
        console.log("Error upgrading anonymous account", error);
      });

Jeśli wywołanie link się powiedzie, nowe konto użytkownika uzyska dostęp do danych Firebase tego konta anonimowego.

Czyszczenie automatyczne

Po uaktualnieniu projektu do Uwierzytelniania Firebase z Identity Platform możesz włączyć automatyczne czyszczenie w konsoli Firebase. Po włączeniu tej funkcji Firebase może automatycznie usuwać anonimowe konta starsze niż 30 dni. W projektach z włączonym automatycznym czyszczeniem uwierzytelnianie anonimowe nie jest wliczane do limitów wykorzystania ani limitów płatności.

  • Wszystkie anonimowe konta utworzone po włączeniu automatycznego czyszczenia mogą zostać automatycznie usunięte w dowolnym momencie po 30 dniach od utworzenia.
  • Istniejące anonimowe konta będą mogły zostać automatycznie usunięte po 30 dniach od włączenia automatycznego czyszczenia.
  • Jeśli wyłączysz automatyczne czyszczenie, wszystkie anonimowe konta przeznaczone do usunięcia pozostaną zaplanowane do usunięcia.
  • Jeśli uaktualnisz konto anonimowe, łącząc je z dowolną metodą logowania, nie zostanie ono automatycznie usunięte.

Jeśli przed włączeniem tej funkcji chcesz sprawdzić, na ilu użytkowników ta funkcja będzie miała wpływ, i przeniesiesz swój projekt na Uwierzytelnianie Firebase na platformie Identity Platform, w Cloud Logging możesz filtrować według wartości is_anon.

Dalsze kroki

Teraz, gdy użytkownicy mogą uwierzytelniać się w Firebase, możesz kontrolować ich dostęp do danych w Twojej bazie danych Firebase za pomocą reguł Firebase.