Tworzenie konta użytkownika
Nowego użytkownika możesz utworzyć na 3 sposoby:
Z poziomu aplikacji: utwórz nowego użytkownika w projekcie Firebase, wywołując metodę
createUserWithEmailAndPassword()lub logując użytkownika po raz pierwszy za pomocą federacyjnego dostawcy tożsamości, np. logowania przez Google, logowania przez Facebooka lub logowania przez Apple.W Firebasekonsoli: utwórz nowego użytkownika uwierzytelnianego hasłem na karcie Zabezpieczenia > Uwierzytelnianie > Użytkownicy.
Pobieranie profilu użytkownika
Aby uzyskać informacje o profilu użytkownika, użyj właściwości obiektu User. Obiekt User reprezentujący bieżącego użytkownika można uzyskać na 3 sposoby:
Strumienie
authStateChanges,idTokenChangesiuserChanges: słuchacze otrzymają bieżącyUserlubnull, 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 Twoje 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 z aktualnym 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
UserCredentialzwracany przez metody uwierzytelniania (signIn-): obiektUserCredentialma właściwośćuserz bieżącymUser:final userCredential = await FirebaseAuth.instance.signInWithCredential(credential); final user = userCredential.user; print(user?.uid);Właściwość
currentUserinstancjiFirebaseAuth: jeśli masz pewność, że użytkownik jest obecnie zalogowany, możesz uzyskać dostęp doUserz właściwościcurrentUser:if (FirebaseAuth.instance.currentUser != null) { print(FirebaseAuth.instance.currentUser?.uid); }currentUsermoże byćnullz 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ć do użytkownika e-maila weryfikacyjnego adresu za pomocą metody sendEmailVerification(). Przykład:
await user?.sendEmailVerification();
Możesz dostosować szablon e-maila używany na karcie Zabezpieczenia > Uwierzytelnianie > Szablony w konsoli Firebase. Zobacz Szablony e-maili w Centrum pomocy Firebase.
Możesz też przekazać stan za pomocą URL-a dalszego działania, aby po wysłaniu e-maila weryfikacyjnego przekierować użytkownika z powrotem do aplikacji.
Możesz też dostosować język e-maila weryfikacyjnego, 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");
Możesz dostosować szablon e-maila używany na karcie Zabezpieczenia > Uwierzytelnianie > Szablony w konsoli Firebase. Zobacz Szablony e-maili w Centrum pomocy Firebase.
Możesz też przekazać stan za pomocą URL-a dalszego działania, aby po wysłaniu e-maila do zresetowania hasła przekierować użytkownika z powrotem do aplikacji.
Możesz też zlokalizować e-maila z prośbą o zresetowanie hasła, 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 konsoli Firebase na karcie Zabezpieczenia > Uwierzytelnianie > 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 w Firebase za pomocą polecenia auth:import wiersza poleceń Firebase. Przykład:
firebase auth:import users.json --hash-algo=scrypt --rounds=8 --mem-cost=14