Uwierzytelniaj anonimowo w Firebase

Uwierzytelniania Firebase możesz używać do tworzenia i używania tymczasowych kont anonimowych na potrzeby uwierzytelniania w Firebase. Te tymczasowe konta anonimowe mogą służyć do umożliwienia użytkownikom, którzy nie zarejestrowali się jeszcze w Twojej aplikacji, pracy z danymi chronionymi przez reguły bezpieczeństwa. Jeśli anonimowy użytkownik zdecyduje się zarejestrować w Twojej aplikacji, możesz połączyć jego dane logowania z kontem anonimowym, aby mógł on w przyszłych sesjach nadal pracować z chronionymi danymi.

Zanim zaczniesz

  1. Jeśli jeszcze tego nie zrobisz, wykonaj czynności opisane w przewodniku Pierwsze kroki.

  2. Włącz anonimowe logowanie:

    • W konsoli Firebase w sekcji Uwierzytelnianie otwórz stronę Metody logowania.
    • Na stronie Metody logowania włącz metodę Anonimowe logowanie i kliknij Zapisz.

Anonimowe uwierzytelnianie w Firebase

Gdy wylogowany użytkownik korzysta z funkcji aplikacji, która wymaga uwierzytelnienia w Firebase, zaloguj go anonimowo, wywołując signInAnonymously():

try {
  final userCredential =
      await FirebaseAuth.instance.signInAnonymously();
  print("Signed in with temporary account.");
} on FirebaseAuthException catch (e) {
  switch (e.code) {
    case "operation-not-allowed":
      print("Anonymous auth hasn't been enabled for this project.");
      break;
    default:
      print("Unknown error.");
  }
}

Przekształcanie konta anonimowego w konto stałe

Gdy anonimowy użytkownik zarejestruje się w Twojej aplikacji, możesz umożliwić mu kontynuowanie pracy na nowym koncie. Możesz na przykład udostępnić na nowym koncie użytkownika elementy, które dodał do koszyka na zakupy przed rejestracją. Aby to zrobić, wykonaj następujące czynności:

  1. Gdy użytkownik się zarejestruje, dokończ proces logowania u dostawcy uwierzytelniania użytkownika , ale nie wywołuj żadnej z metod signInWith. Możesz na przykład pobrać token identyfikatora Google użytkownika, token dostępu do Facebooka lub adres e-mail i hasło.

  2. Pobierz obiekt Credential dla nowego dostawcy uwierzytelniania:

    // Google Sign-in
    final credential = GoogleAuthProvider.credential(idToken: idToken);
    
    // Email and password sign-in
    final credential =
        EmailAuthProvider.credential(email: emailAddress, password: password);
    
    // Etc.
    
  3. Przekaż obiekt Credential do metody linkWithCredential() użytkownika logującego się:

    try {
      final userCredential = await FirebaseAuth.instance.currentUser
          ?.linkWithCredential(credential);
    } on FirebaseAuthException catch (e) {
      switch (e.code) {
        case "provider-already-linked":
          print("The provider has already been linked to the user.");
          break;
        case "invalid-credential":
          print("The provider's credential is not valid.");
          break;
        case "credential-already-in-use":
          print("The account corresponding to the credential already exists, "
              "or is already linked to a Firebase User.");
          break;
        // See the API reference for the full list of error codes.
        default:
          print("Unknown error.");
      }
      ```
    

Jeśli wywołanie linkWithCredential() się powiedzie, nowe konto użytkownika będzie mogło uzyskać dostęp do danych Firebase konta anonimowego.

Dalsze kroki

Gdy użytkownik utworzy nowe konto, zostanie ono zapisane w Twoim projekcie w Firebase i będzie można go używać do identyfikowania użytkownika w każdej aplikacji w projekcie, niezależnie od metody logowania.

W aplikacjach możesz pobierać podstawowe informacje o profilu użytkownika z obiektu User. Zobacz Zarządzanie użytkownikami.

W regułach bezpieczeństwa bazy danych czasu rzeczywistego Firebase i Cloud Storage możesz pobrać unikalny identyfikator użytkownika zalogowanego z zmiennej auth i użyć go do kontrolowania, do jakich danych użytkownik może mieć dostęp.

Możesz zezwolić użytkownikom na logowanie się w Twojej aplikacji za pomocą wielu dostawców uwierzytelniania przez połączenie danych logowania dostawcy uwierzytelniania) z istniejącym kontem użytkownika.

Aby wylogować użytkownika, wywołaj signOut():

await FirebaseAuth.instance.signOut();