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 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 chcesz 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 zmienia 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