Utwórz użytkownika
Nowego użytkownika w projekcie Firebase tworzy się na cztery sposoby:
- Wywołaj metodę
createUserWithEmailAndPassword()
. - Zaloguj się użytkownika po raz pierwszy przy użyciu 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, skorzystaj z właściwości User
. Istnieją trzy sposoby uzyskania obiektu User
reprezentującego bieżącego użytkownika:
authStateChanges
,idTokenChanges
iuserChanges
: Twoi słuchacze otrzymają bieżącegoUser
, lubnull
, jeśli żaden użytkownik nie jest uwierzytelniony:FirebaseAuth.instance .authStateChanges() .listen((User? user) { if (user != null) { print(user.uid); } });
Po uruchomieniu aplikacji zdarzenie jest wywoływane po przywróceniu poświadczeń użytkownika (jeśli istnieją) z magazynu lokalnego, co oznacza, że odbiorniki są zawsze wywoływane po zainicjowaniu stanu użytkownika. Następnie za każdym razem, gdy zmieni się stan uwierzytelniania, zostanie zgłoszone nowe zdarzenie ze zaktualizowanym stanem użytkownika.
Nasłuchując stanu uwierzytelniania, można zbudować interfejs użytkownika, który reaguje na te zmiany stanu uwierzytelniania.
Obiekt
UserCredential
zwrócony przez metody uwierzytelniania (signIn
-): obiektUserCredential
posiada właściwośćuser
z bieżącymUser
:final userCredential = await FirebaseAuth.instance.signInWithCredential(credential); final user = userCredential.user; print(user?.uid);
Właściwość
currentUser
instancjiFirebaseAuth
: jeśli masz pewność, że użytkownik jest aktualnie zalogowany, możesz uzyskać dostęp doUser
z właściwościcurrentUser
: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.
- Inicjowanie obiektu auth nie zostało zakończone. Jeśli używasz detektora do śledzenia stanu logowania użytkownika, nie musisz zajmować się tym przypadkiem.
Uzyskaj informacje o profilu dostawcy 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
Możesz zaktualizować podstawowe informacje o profilu użytkownika — wyświetlaną nazwę użytkownika i adres URL zdjęcia profilowego — za pomocą metod update
. 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ć e-mail weryfikujący adres 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 za pomocą adresu URL kontynuacji , aby przekierować z powrotem do aplikacji podczas wysyłania e-maila weryfikacyjnego.
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 umożliwiającą zresetowanie hasła
Możesz wysłać wiadomość e-mail umożliwiającą zresetowanie hasła do użytkownika 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 za pomocą adresu 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ć e-maile 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 usuwać użytkowników z sekcji Uwierzytelnianie konsoli Firebase na stronie Użytkownicy.
Ponownie uwierzytelnij użytkownika
Niektóre czynności związane z bezpieczeństwem — takie jak usunięcie konta , ustawienie podstawowego adresu e-mail i zmiana hasła — wymagają niedawnego zalogowania się użytkownika. Jeśli wykonasz jedną z tych czynności, a użytkownik zalogował się zbyt dawno temu, Akcja kończy się niepowodzeniem i zgłasza FirebaseAuthException
z kodem requires-recent-login
. W takim przypadku ponownie uwierzytelnij użytkownika, pobierając od niego nowe poświadczenia logowania i przekazując je do 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
Konta użytkowników z pliku możesz zaimportować do projektu Firebase za pomocą polecenia auth:import
interfejsu wiersza polecenia Firebase. Na przykład:
firebase auth:import users.json --hash-algo=scrypt --rounds=8 --mem-cost=14