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
iuserChanges
: Twoi słuchacze otrzymają bieżącyUser
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 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
-): obiektUserCredential
ma 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.
- 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