Создать пользователя
Создать нового пользователя в проекте Firebase можно четырьмя способами:
- Вызовите метод
createUserWithEmailAndPassword(). - Первый вход пользователя в систему с использованием федеративного поставщика идентификации , такого как Google Sign-In, Facebook Login или Apple.
Также вы можете создавать новых пользователей с аутентификацией по паролю в разделе «Аутентификация» консоли Firebase на странице «Пользователи».
Получить профиль пользователя
Чтобы получить информацию о профиле пользователя, используйте свойства объекта User . Существует три способа получить объект User , представляющий текущего пользователя:
Потоки
authStateChanges,idTokenChangesиuserChanges: ваши слушатели будут получать текущегоUserилиnull, если пользователь не аутентифицирован.FirebaseAuth.instance .authStateChanges() .listen((User? user) { if (user != null) { print(user.uid); } });При запуске приложения событие срабатывает после восстановления учетных данных пользователя (если таковые имеются) из локального хранилища, то есть ваши обработчики событий всегда вызываются при инициализации состояния пользователя. Затем, при каждом изменении состояния аутентификации, будет генерироваться новое событие с обновленным состоянием пользователя.
Отслеживая состояние аутентификации, вы можете создать пользовательский интерфейс, реагирующий на эти изменения. Не размещайте метод
authStateChanges().listen(...)непосредственно в методе `build` виджета, так как это создаст новую подписку при каждой пересборке. Если вам необходимо обновлять пользовательский интерфейс в ответ на состояние аутентификации, используйте `StreamBuilder: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); }, )Такой подход гарантирует автоматическую перестройку дерева виджетов при изменении состояния аутентификации пользователя.
Объект
UserCredentialвозвращаемый методами аутентификации (signIn): объектUserCredentialимеет свойствоuser, содержащее имя текущегоUser:final userCredential = await FirebaseAuth.instance.signInWithCredential(credential); final user = userCredential.user; print(user?.uid);Свойство
currentUserэкземпляраFirebaseAuth: если вы уверены, что пользователь в данный момент авторизован, вы можете получить доступ кUserчерез свойствоcurrentUser:if (FirebaseAuth.instance.currentUser != null) { print(FirebaseAuth.instance.currentUser?.uid); }currentUserможет бытьnullпо двум причинам:- Пользователь не авторизован.
- Объект аутентификации еще не завершил инициализацию. Если вы используете слушатель для отслеживания статуса входа пользователя, вам не нужно обрабатывать этот случай.
Получите информацию о профиле пользователя, относящуюся к конкретному поставщику услуг.
Чтобы получить информацию профиля, полученную от поставщиков авторизации, связанных с пользователем, используйте свойство providerData . Например:
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;
}
}
Обновить профиль пользователя
Вы можете обновить основную информацию профиля пользователя — отображаемое имя пользователя и URL-адрес фотографии профиля — с помощью методов update . Например:
await user?.updateDisplayName("Jane Q. User");
await user?.updatePhotoURL("https://example.com/jane-q-user/profile.jpg");
Укажите адрес электронной почты пользователя
Адрес электронной почты пользователя можно задать с помощью метода updateEmail() . Например:
await user?.updateEmail("janeq@example.com");
Отправить пользователю письмо с подтверждением
Вы можете отправить пользователю письмо с подтверждением адреса электронной почты с помощью метода sendEmailVerification() . Например:
await user?.sendEmailVerification();
Вы можете настроить шаблон электронного письма, используемый в разделе «Аутентификация» консоли Firebase , на странице «Шаблоны электронных писем». См. раздел «Шаблоны электронных писем» в Справочном центре Firebase.
Также можно передать состояние через URL-адрес продолжения , чтобы перенаправить пользователя обратно в приложение при отправке письма с подтверждением.
Кроме того, вы можете локализовать письмо с подтверждением, обновив код языка в экземпляре аутентификации перед отправкой письма. Например:
await FirebaseAuth.instance.setLanguageCode("fr");
await user?.sendEmailVerification();
Установить пароль пользователя
Вы можете установить пароль пользователя с помощью метода updatePassword() . Например:
await user?.updatePassword(newPassword);
Отправить письмо для сброса пароля
Вы можете отправить пользователю письмо для сброса пароля с помощью метода sendPasswordResetEmail() . Например:
await FirebaseAuth.instance
.sendPasswordResetEmail(email: "user@example.com");
Вы можете настроить шаблон электронного письма, используемый в разделе «Аутентификация» консоли Firebase , на странице «Шаблоны электронных писем». См. раздел «Шаблоны электронных писем» в Справочном центре Firebase.
Также можно передать состояние через URL-адрес продолжения , чтобы перенаправить пользователя обратно в приложение при отправке электронного письма для сброса пароля.
Кроме того, вы можете локализовать электронное письмо для сброса пароля, обновив код языка в экземпляре аутентификации перед отправкой письма. Например:
await FirebaseAuth.instance.setLanguageCode("fr");
Вы также можете отправлять электронные письма для сброса пароля из консоли Firebase.
Удалить пользователя
Удалить учетную запись пользователя можно с помощью метода delete() . Например:
await user?.delete();
Также вы можете удалять пользователей в разделе «Аутентификация» консоли Firebase на странице «Пользователи».
Повторная аутентификация пользователя
Некоторые действия, требующие повышенного внимания к безопасности, такие как удаление учетной записи , установка основного адреса электронной почты и изменение пароля , предполагают недавний вход пользователя в систему. Если вы выполните одно из этих действий, а пользователь вошел в систему слишком давно, действие завершится с ошибкой и вызовет исключение FirebaseAuthException с кодом requires-recent-login . В этом случае выполните повторную аутентификацию пользователя, получив от него новые учетные данные для входа и передав их в функцию reauthenticate . Например:
// Prompt the user to re-provide their sign-in credentials.
// Then, use the credentials to reauthenticate:
await user?.reauthenticateWithCredential(credential);
Импорт учетных записей пользователей
Вы можете импортировать учетные записи пользователей из файла в свой проект Firebase, используя команду auth:import в Firebase CLI. Например:
firebase auth:import users.json --hash-algo=scrypt --rounds=8 --mem-cost=14