Zarządzaj użytkownikami w Firebase

Tworzenie konta użytkownika

Nowego użytkownika możesz utworzyć w projekcie Firebase na 4 sposoby:

  • Wywołaj metodę createUserWithEmailAndPassword().
  • Zaloguj użytkownika po raz pierwszy przy użyciu dostawcy tożsamości sfederowanej, na przykład przez Logowanie przez Google, Facebooka lub Apple.

Nowych użytkowników z uwierzytelnianiem za pomocą hasła możesz też utworzyć w sekcji Uwierzytelnianie w konsoli Firebase na stronie Użytkownicy.

Pobieranie profilu użytkownika

Aby uzyskać informacje o profilu użytkownika, skorzystaj z właściwości User. Obiekt User reprezentujący bieżącego użytkownika można uzyskać na 3 sposoby:

  • Strumienie authStateChanges, idTokenChanges i userChanges: słuchacze otrzymają bieżącą wartość User lub null, jeśli żaden użytkownik nie jest uwierzytelniony:

    FirebaseAuth.instance
      .authStateChanges()
      .listen((User? user) {
        if (user != null) {
          print(user.uid);
        }
      });
    

    Gdy aplikacja się uruchamia, zdarzenie jest wywoływane po przywróceniu danych logowania użytkownika (jeśli istnieją) z pamięci lokalnej. Oznacza to, że detektory są zawsze wywoływane po zainicjowaniu stanu użytkownika. Następnie, po każdej zmianie stanu uwierzytelniania, tworzone jest nowe zdarzenie ze zaktualizowanym stanem użytkownika.

    Nasłuchując stanu uwierzytelniania, możesz zbudować interfejs użytkownika, który reaguje na te zmiany stanu uwierzytelniania.

  • Obiekt UserCredential zwrócony przez metody uwierzytelniania (signIn-): obiekt UserCredential ma właściwość user z bieżącą wartością User:

    final userCredential =
        await FirebaseAuth.instance.signInWithCredential(credential);
    final user = userCredential.user;
    print(user?.uid);
    
  • Właściwość currentUser instancji FirebaseAuth: jeśli masz pewność, że użytkownik jest zalogowany, dostęp do User uzyskasz z poziomu usługi currentUser:

    if (FirebaseAuth.instance.currentUser != null) {
      print(FirebaseAuth.instance.currentUser?.uid);
    }
    

    Wartość currentUser może być wartością null z dwóch powodów:

    • Użytkownik nie jest zalogowany.
    • Inicjowanie obiektu uwierzytelniania nie zostało zakończone. Jeśli używasz detektora, aby śledzić stan logowania użytkownika, nie musisz się tym zajmować.

Uzyskiwanie informacji o profilu użytkownika specyficznych dla dostawcy

Aby pobrać informacje profilowe pobrane od dostawców logowania połączonych z użytkownikiem, użyj właściwości providerData. Przykład:

if (user != null) {
    for (final providerProfile in user.providerData) {
        // ID of the provider (google.com, apple.com, etc.)
        final provider = providerProfile.providerId;

        // UID specific to the provider
        final uid = providerProfile.uid;

        // Name, email address, and profile photo URL
        final name = providerProfile.displayName;
        final emailAddress = providerProfile.email;
        final profilePhoto = providerProfile.photoURL;
    }
}

Aktualizowanie profilu użytkownika

Za pomocą metod update możesz aktualizować podstawowe informacje profilowe użytkownika – wyświetlaną nazwę i adres URL zdjęcia profilowego. Przykład:

await user?.updateDisplayName("Jane Q. User");
await user?.updatePhotoURL("https://example.com/jane-q-user/profile.jpg");

Ustawianie adresu e-mail użytkownika

Adres e-mail użytkownika możesz skonfigurować za pomocą metody updateEmail(). Przykład:

await user?.updateEmail("janeq@example.com");

Wysyłanie e-maila weryfikacyjnego do użytkownika

Aby wysłać do użytkownika e-maila na potrzeby weryfikacji adresu, użyj metody sendEmailVerification(). Przykład:

await user?.sendEmailVerification();

Na stronie Szablony e-maili możesz dostosować szablon e-maila w sekcji Uwierzytelnianie w konsoli Firebase. Przeczytaj artykuł Szablony e-maili w Centrum pomocy Firebase.

Można też przekazać stan za pomocą adresu URL kontynuacji, aby przekierowywać użytkowników z powrotem do aplikacji podczas wysyłania e-maila weryfikacyjnego.

Możesz też zlokalizować e-maila weryfikacyjnego, aktualizując kod języka w instancji Auth przed wysłaniem wiadomości. Przykład:

await FirebaseAuth.instance.setLanguageCode("fr");
await user?.sendEmailVerification();

Ustawianie hasła użytkownika

Hasło użytkownika możesz ustawić za pomocą metody updatePassword(). Przykład:

await user?.updatePassword(newPassword);

Wyślij e-maila do resetowania hasła

Za pomocą metody sendPasswordResetEmail() możesz wysłać do użytkownika e-maila z prośbą o zresetowanie hasła. Przykład:

await FirebaseAuth.instance
    .sendPasswordResetEmail(email: "user@example.com");

Na stronie Szablony e-maili możesz dostosować szablon e-maila w sekcji Uwierzytelnianie w konsoli Firebase. Przeczytaj artykuł Szablony e-maili w Centrum pomocy Firebase.

Możesz też przekazywać stan za pomocą adresu URL kontynuacji, aby przekierowywać użytkowników z powrotem do aplikacji podczas wysyłania e-maila do resetowania hasła.

Możesz też zlokalizować e-maila do resetowania hasła, aktualizując kod języka w instancji Auth przed wysłaniem wiadomości. Przykład:

await FirebaseAuth.instance.setLanguageCode("fr");

Możesz też wysyłać e-maile dotyczące resetowania hasła z konsoli Firebase.

Usuwanie konta użytkownika

Konto użytkownika możesz usunąć za pomocą metody delete(). Przykład:

await user?.delete();

Użytkowników możesz też usuwać w sekcji Uwierzytelnianie w konsoli Firebase na stronie Użytkownicy.

Ponowne uwierzytelnianie użytkownika

Niektóre działania związane z bezpieczeństwem (takie jak usunięcie konta, ustawienie podstawowego adresu e-mail lub zmiana hasła) wymagają ostatniego zalogowania się. Jeśli wykonasz jedną z tych czynności, a użytkownik zalogował się zbyt dawno temu, czynność ta nie powiedzie się i zgłosi FirebaseAuthException z kodem requires-recent-login. W takim przypadku ponownie uwierzytelnij użytkownika, uzyskując od niego nowe dane logowania i przekazując je do usługi reauthenticate. Przykład:

// Prompt the user to re-provide their sign-in credentials.
// Then, use the credentials to reauthenticate:
await user?.reauthenticateWithCredential(credential);

Importowanie kont użytkowników

Aby zaimportować konta użytkowników z pliku do projektu Firebase, użyj polecenia auth:import interfejsu wiersza poleceń Firebase. Przykład:

firebase auth:import users.json --hash-algo=scrypt --rounds=8 --mem-cost=14