Uwierzytelnij się anonimowo w Firebase

Możesz użyć uwierzytelniania Firebase, aby utworzyć tymczasowe konta anonimowe i używać ich do uwierzytelniania w Firebase. Za pomocą tych tymczasowych anonimowych kont użytkownicy, którzy nie zarejestrowali się jeszcze w Twojej aplikacji, mogą pracować z danymi chronionymi regułami bezpieczeństwa. Jeśli anonimowy użytkownik zdecyduje się zarejestrować w Twojej aplikacji, możesz powiązać jego dane logowania z anonimowym kontem, aby mógł kontynuować pracę z chronionymi danymi w przyszłych sesjach.

Zanim zaczniesz

  1. Jeśli jeszcze tego nie zrobiłeś, wykonaj czynności opisane w przewodniku wprowadzającym .

  2. Włącz logowanie anonimowe:

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

Uwierzytelnij się anonimowo w Firebase

Gdy niezalogowany użytkownik korzysta z funkcji aplikacji wymagającej uwierzytelniania w Firebase, zaloguj się anonimowo, wywołując funkcję 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.");
  }
}

Zamień konto anonimowe na konto stałe

Gdy anonimowy użytkownik zarejestruje się w Twojej aplikacji, możesz zezwolić mu na kontynuowanie pracy na nowym koncie — na przykład możesz udostępnić na nowym koncie pozycje, które użytkownik dodał do koszyka przed rejestracją. koszyk konta. Aby to zrobić, wykonaj następujące kroki:

  1. Gdy użytkownik zarejestruje się, zakończ proces logowania dla dostawcy uwierzytelniania użytkownika, aż do wywołania jednej z metod signInWith , ale nie łącznie. Na przykład uzyskaj token identyfikatora Google użytkownika, token dostępu do Facebooka lub adres e-mail i hasło.

  2. Uzyskaj 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() zalogowanego użytkownika:

    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 funkcji linkWithCredential() powiedzie się, nowe konto użytkownika będzie mogło uzyskać dostęp do danych Firebase konta anonimowego.

Następne kroki

Gdy użytkownik utworzy nowe konto, jest ono przechowywane jako część projektu Firebase i może służyć do identyfikowania użytkownika w każdej aplikacji w projekcie, niezależnie od metody logowania, której użył użytkownik.

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

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

Możesz zezwolić użytkownikom na logowanie się do aplikacji przy użyciu wielu dostawców uwierzytelniania, łącząc dane uwierzytelniające dostawcy uwierzytelniania ) z istniejącym kontem użytkownika.

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

await FirebaseAuth.instance.signOut();