Tworzenie konta użytkownika
Nowego użytkownika w projekcie Firebase możesz utworzyć na 4 sposoby:
- Wywołaj metodę
createUserWithEmailAndPassword()
. - Pierwsze logowanie użytkownika za pomocą dostawcy tożsamości federacyjnej, takiego jak logowanie przez Google, Facebook lub Apple.
Nowych użytkowników uwierzytelnianych hasłem możesz też tworzyć w sekcji Uwierzytelnianie w konsoli Firebase na stronie Użytkownicy.
Pobieranie profilu użytkownika
Aby uzyskać informacje o profilu użytkownika, użyj właściwości User
. Obiekt User
reprezentujący bieżącego użytkownika można uzyskać na 3 sposoby:
Strumienie
authStateChanges
,idTokenChanges
iuserChanges
: 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 jest wywoływane po przywróceniu danych logowania użytkownika (jeśli takie istnieją) z pamięci lokalnej. Oznacza to, że odbiorniki są zawsze wywoływane, gdy stan użytkownika jest inicjowany. Następnie za każdym razem, gdy zmieni się stan uwierzytelniania, zostanie wywołane nowe zdarzenie ze zaktualizowanym stanem użytkownika.
Monitorując stan uwierzytelniania, możesz utworzyć interfejs użytkownika, który reaguje na te zmiany. Nie umieszczaj
authStateChanges().listen(...)
bezpośrednio w metodzie build widżetu, ponieważ przy każdej przebudowie utworzy to nową subskrypcję. Jeśli musisz zaktualizować interfejs w odpowiedzi na stan uwierzytelniania, użyjStreamBuilder
:StreamBuilder<User?>( stream: FirebaseAuth.instance.authStateChanges(), builder: (BuildContext context, AsyncSnapshot<User?> snapshot) { if (snapshot.hasError) { return const Text('Something went wrong'); } if (snapshot.connectionState == ConnectionState.waiting) { return const Text("Loading..."); } if (!snapshot.hasData) { return const SignInScreen(); } final user = snapshot.data!; return HomeScreen(userId: user.uid); }, )
Dzięki temu drzewo widżetów jest automatycznie przebudowywane, gdy zmieni się stan uwierzytelniania użytkownika.
Obiekt
UserCredential
zwracany 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 obecnie zalogowany, możesz uzyskać dostęp doUser
z właściwościcurrentUser
:if (FirebaseAuth.instance.currentUser != null) { print(FirebaseAuth.instance.currentUser?.uid); }
Symbol
currentUser
może byćnull
z 2 powodów:- Użytkownik nie jest zalogowany.
- Obiekt uwierzytelniania nie został jeszcze zainicjowany. Jeśli używasz odbiornika do śledzenia stanu logowania użytkownika, nie musisz obsługiwać tego przypadku.
Pobieranie informacji o profilu użytkownika specyficznych dla dostawcy
Aby uzyskać informacje o profilu 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
Podstawowe informacje o użytkowniku, czyli jego nazwę wyświetlaną i adres URL zdjęcia profilowego, możesz aktualizować za pomocą metod update
-. 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 ustawić za pomocą metody updateEmail()
. Przykład:
await user?.updateEmail("janeq@example.com");
Wysyłanie użytkownikowi e-maila weryfikacyjnego
Możesz wysłać e-maila weryfikacyjnego na adres użytkownika za pomocą metody sendEmailVerification()
. Przykład:
await user?.sendEmailVerification();
Szablon e-maila używany w sekcji Uwierzytelnianie w konsoli Firebase możesz dostosować na stronie Szablony e-maili. Zobacz Szablony e-maili w Centrum pomocy Firebase.
Możesz też przekazać stan za pomocą adresu URL kontynuacji, aby po wysłaniu e-maila weryfikacyjnego przekierować użytkownika z powrotem do aplikacji.
Możesz też dostosować e-maila weryfikacyjnego do języka użytkownika, aktualizując kod języka w instancji Auth przed wysłaniem e-maila. 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);
Wysyłanie e-maila do resetowania hasła
Możesz wysłać e-maila z prośbą o zresetowanie hasła do użytkownika za pomocą metody sendPasswordResetEmail()
. Przykład:
await FirebaseAuth.instance
.sendPasswordResetEmail(email: "user@example.com");
Szablon e-maila używany w sekcji Uwierzytelnianie w konsoli Firebase możesz dostosować na stronie Szablony e-maili. Zobacz Szablony e-maili w Centrum pomocy Firebase.
Możesz też przekazać stan za pomocą adresu URL kontynuacji, aby po wysłaniu e-maila do zresetowania hasła przekierować użytkownika z powrotem do aplikacji.
Możesz też dostosować e-maila z prośbą o zresetowanie hasła do języka użytkownika, aktualizując kod języka w instancji Auth przed wysłaniem e-maila. Przykład:
await FirebaseAuth.instance.setLanguageCode("fr");
E-maile z prośbą o zresetowanie hasła możesz też wysyłać z konsoli Firebase.
Usuwanie 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 usuwanie konta, ustawianie podstawowego adresu e-mail i zmiana hasła, wymagają, aby użytkownik niedawno się zalogował. Jeśli wykonasz jedno z tych działań, a użytkownik zalogował się zbyt dawno, działanie zakończy się niepowodzeniem i zostanie zgłoszony wyjątek 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 funkcji 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
Możesz zaimportować konta użytkowników z pliku do projektu Firebase za pomocą polecenia auth:import
wiersza poleceń Firebase. Przykład:
firebase auth:import users.json --hash-algo=scrypt --rounds=8 --mem-cost=14