Tworzenie konta użytkownika
Nowe konto użytkownika możesz utworzyć na te sposoby:
W 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, takiego jak Logowanie przez Google, Logowanie przez Facebooka lub Apple.W konsoli Firebase: utwórz nowego użytkownika uwierzytelnianego hasłem na karcie Bezpieczeństwo > Uwierzytelnianie > 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żesz uzyskać na 3 sposoby:
Strumienie
authStateChanges,idTokenChangesiuserChanges: Twoi odbiorcy otrzymają bieżący obiektUserlub wartośćnull, 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 uwierzytelniających użytkownika (jeśli istnieją) z pamięci lokalnej. Oznacza to, że odbiorcy są zawsze wywoływani, gdy stan użytkownika jest inicjowany. Następnie, gdy stan uwierzytelniania się zmieni, zostanie wywołane nowe zdarzenie z zaktualizowanym stanem użytkownika.
Nasłuchując stanu uwierzytelniania, możesz utworzyć interfejs użytkownika, który reaguje na te zmiany stanu uwierzytelniania. Nie umieszczaj
authStateChanges().listen(...)bezpośrednio w metodzie build widgetu, ponieważ przy każdej przebudowie utworzy ona nową subskrypcję. Jeśli musisz zaktualizować interfejs użytkownika 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 widgetów będzie się automatycznie przebudowywać, 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 doUserza pomocą właściwościcurrentUserproperty:if (FirebaseAuth.instance.currentUser != null) { print(FirebaseAuth.instance.currentUser?.uid); }Właściwość
currentUsermoże mieć wartośćnullz 2 powodów:- Użytkownik nie jest zalogowany.
- Obiekt uwierzytelniania nie został jeszcze zainicjowany. Jeśli używasz odbiorcy 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 profilu użytkownika – nazwę wyświetlaną
i adres URL zdjęcia profilowego – możesz zaktualizować 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 do użytkownika e-maila weryfikacyjnego
Do użytkownika możesz wysłać e-maila z prośbą o weryfikację adresu za pomocą metody sendEmailVerification(). Przykład:
await user?.sendEmailVerification();
Możesz dostosować, którego szablonu e-maila użyć, na karcie Bezpieczeństwo > Uwierzytelnianie > Szablony w konsoli Firebase. Zobacz Szablony e-maili w Centrum pomocy Firebase.
Dodatkowo możesz zlokalizować 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
Do użytkownika możesz wysłać e-maila z prośbą o zresetowanie hasła za pomocą metody sendPasswordResetEmail(). Przykład:
await FirebaseAuth.instance
.sendPasswordResetEmail(email: "user@example.com");
Możesz dostosować, którego szablonu e-maila użyć, na karcie Bezpieczeństwo > Uwierzytelnianie > Szablony w konsoli Firebase. Zobacz Szablony e-maili w Centrum pomocy Firebase.
Dodatkowo możesz zlokalizować e-maila do resetowania hasła, aktualizując kod języka w instancji Auth przed wysłaniem e-maila. Przykład:
await FirebaseAuth.instance.setLanguageCode("fr");
E-maile do resetowania hasła możesz też wysyłać z konsoli Firebase.
Usuwanie konta 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 Bezpieczeństwo > Uwierzytelnianie > Użytkownicy.
Ponowne uwierzytelnianie użytkownika
Niektóre działania wymagające zachowania szczególnych środków bezpieczeństwa, takie jak
usuwanie konta,
ustawianie głównego adresu e-mail i
zmienianie hasła, wymagają, aby użytkownik był
niedawno zalogowany. Jeśli wykonasz jedno z tych działań, a użytkownik zalogował się zbyt dawno, działanie nie powiedzie się 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 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
Konta użytkowników możesz importować z pliku do projektu Firebase za pomocą polecenia auth:import w interfejsie wiersza poleceń
Firebase. Przykład:
firebase auth:import users.json --hash-algo=scrypt --rounds=8 --mem-cost=14