Uwierzytelniaj anonimowo w Firebase

Do uwierzytelniania w Firebase możesz używać Uwierzytelniania Firebase, aby tworzyć i wykorzystywać tymczasowe konta anonimowe. Te tymczasowe anonimowe konta mogą być używane, aby umożliwić użytkownikom, którzy nie zarejestrowali się jeszcze w Twojej aplikacji, 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 kontem anonimowym, aby w przyszłości mógł nadal pracować z chronionymi danymi.

Zanim zaczniesz

  1. Jeśli nie masz jeszcze dostępu do konta demonstracyjnego, postępuj zgodnie z instrukcjami w przewodniku Pierwsze kroki.

  2. Włącz logowanie anonimowe:

    1. W konsoli Firebase otwórz Bezpieczeństwo > Uwierzytelnianie.

    2. Na karcie Metoda logowania włącz dostawcę logowania Anonimowe.

    3. Kliknij Zapisz.

Anonimowe uwierzytelnianie w Firebase

Gdy wylogowany użytkownik korzysta z funkcji aplikacji, która wymaga uwierzytelniania 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 zezwolić mu na kontynuowanie pracy na nowym koncie. Możesz na przykład sprawić, że produkty dodane przez użytkownika do koszyka na zakupy przed rejestracją będą dostępne w koszyku na zakupy na nowym koncie. Aby to zrobić, wykonaj te czynności:

  1. Gdy użytkownik się zarejestruje, dokończ proces logowania w przypadku dostawcy uwierzytelniania użytkownika, ale nie wywołuj żadnej z metod signInWith-. Na przykład uzyskaj token identyfikacji 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() 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 mieć dostęp do danych Firebase konta anonimowego.

Dalsze kroki

Po utworzeniu przez użytkownika nowego konta jest ono przechowywane w ramach projektu w Firebase i może służyć 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 zabezpieczeń bazy danych czasu rzeczywistego Firebase i Cloud Storage możesz pobrać unikalny identyfikator użytkownika, który jest zalogowany, ze zmiennej auth i użyć go do kontrolowania, do jakich danych użytkownik ma dostęp.

Możesz zezwolić użytkownikom na logowanie się w aplikacji za pomocą wielu dostawców uwierzytelniania, łącząc dane logowania dostawcy uwierzytelniania z istniejącym kontem użytkownika.

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

await FirebaseAuth.instance.signOut();