Zarządzaj użytkownikami w Firebase

Utwórz użytkownika

Tworzysz nowego użytkownika w projekcie Firebase na cztery sposoby:

  • Wywołaj metodę createUserWithEmailAndPassword() .
  • Zaloguj się po raz pierwszy za pomocą federacyjnego dostawcy tożsamości , takiego jak Google Sign-In, Facebook Login lub Apple.

Możesz także utworzyć nowych użytkowników uwierzytelnionych hasłem w sekcji Uwierzytelnianie konsoli Firebase na stronie Użytkownicy.

Uzyskaj profil użytkownika

Aby uzyskać informacje o profilu użytkownika, użyj właściwości User . Istnieją trzy sposoby uzyskania obiektu User reprezentującego bieżącego użytkownika:

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

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

    Po uruchomieniu aplikacji zdarzenie zostaje wywołane po przywróceniu poświadczeń użytkownika (jeśli istnieją) z magazynu lokalnego, co oznacza, że ​​detektory są zawsze wywoływane po zainicjowaniu stanu użytkownika. Następnie za każdym razem, gdy zmieni się stan uwierzytelniania, zostanie wywołane nowe zdarzenie ze zaktualizowanym stanem użytkownika.

    Nasłuchując stanu uwierzytelnienia, można zbudować interfejs użytkownika, który będzie reagował na zmiany stanu uwierzytelnienia.

  • Obiekt UserCredential zwrócony przez metody uwierzytelniania ( signIn -): obiekt UserCredential ma właściwość user z bieżącym 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 aktualnie zalogowany, możesz uzyskać dostęp do User z właściwości currentUser :

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

    currentUser może mieć null z dwóch powodów:

    • Użytkownik nie jest zalogowany.
    • Obiekt uwierzytelniający nie zakończył inicjowania. Jeśli używasz odbiornika do śledzenia stanu logowania użytkownika, nie musisz zajmować się tą sprawą.

Uzyskaj informacje o profilu dostawcy specyficzne dla użytkownika

Aby uzyskać informacje o profilu pobrane od dostawców logowania połączonych z użytkownikiem, użyj właściwości providerData . Na 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;
    }
}

Zaktualizuj profil użytkownika

Za pomocą metod update możesz zaktualizować podstawowe informacje o profilu użytkownika — wyświetlaną nazwę użytkownika i adres URL zdjęcia profilowego. Na przykład:

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

Ustaw adres e-mail użytkownika

Adres e-mail użytkownika można ustawić za pomocą metody updateEmail() . Na przykład:

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

Wyślij użytkownikowi e-mail weryfikacyjny

Możesz wysłać wiadomość e-mail z weryfikacją adresu do użytkownika za pomocą metody sendEmailVerification() . Na przykład:

await user?.sendEmailVerification();

Możesz dostosować szablon wiadomości e-mail używany w sekcji Uwierzytelnianie konsoli Firebase na stronie Szablony wiadomości e-mail. Zobacz Szablony e-maili w Centrum pomocy Firebase.

Możliwe jest również przekazanie stanu poprzez adres URL kontynuacji, aby przekierować z powrotem do aplikacji podczas wysyłania wiadomości e-mail weryfikacyjnej.

Dodatkowo możesz zlokalizować e-mail weryfikacyjny, aktualizując kod języka w instancji Auth przed wysłaniem e-maila. Na przykład:

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

Ustaw hasło użytkownika

Hasło użytkownika można ustawić za pomocą metody updatePassword() . Na przykład:

await user?.updatePassword(newPassword);

Wyślij wiadomość e-mail dotyczącą resetowania hasła

Możesz wysłać użytkownikowi wiadomość e-mail dotyczącą resetowania hasła za pomocą metody sendPasswordResetEmail() . Na przykład:

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

Możesz dostosować szablon wiadomości e-mail używany w sekcji Uwierzytelnianie konsoli Firebase na stronie Szablony wiadomości e-mail. Zobacz Szablony e-maili w Centrum pomocy Firebase.

Możliwe jest również przekazanie stanu poprzez adres URL kontynuacji, aby przekierować z powrotem do aplikacji podczas wysyłania wiadomości e-mail dotyczącej resetowania hasła.

Dodatkowo możesz zlokalizować wiadomość e-mail dotyczącą resetowania hasła, aktualizując kod języka w instancji Auth przed wysłaniem wiadomości e-mail. Na przykład:

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

Możesz także wysyłać wiadomości e-mail dotyczące resetowania hasła z konsoli Firebase.

Usuń użytkownika

Konto użytkownika można usunąć za pomocą metody delete() . Na przykład:

await user?.delete();

Możesz także usunąć użytkowników z sekcji Uwierzytelnianie konsoli Firebase na stronie Użytkownicy.

Ponownie uwierzytelnij użytkownika

Niektóre działania związane z bezpieczeństwem — takie jak usunięcie konta , ustawienie podstawowego adresu e-mail i zmiana hasła — wymagają, aby użytkownik zalogował się niedawno. Jeśli wykonasz jedną z tych czynności, a użytkownik zalogował się zbyt dawno temu, akcja kończy się niepowodzeniem i zgłasza wyjątek FirebaseAuthException z kodem requires-recent-login . Gdy tak się stanie, ponownie uwierzytelnij użytkownika, uzyskując od niego nowe dane logowania i przekazując je w celu reauthenticate . Na przykład:

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

Importuj konta użytkowników

Możesz zaimportować konta użytkowników z pliku do projektu Firebase, używając polecenia auth:import interfejsu Firebase CLI. Na przykład:

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