Как создать пользователя
Создать пользователя можно следующими способами:
Из приложения. Создайте нового пользователя в проекте Firebase, вызвав метод
createUserWithEmailAndPasswordили выполнив первый вход пользователя с помощью федеративного поставщика идентификационной информации, например Google или Facebook.В консоли Firebase создайте нового пользователя с аутентификацией по паролю на вкладке Безопасность > Аутентификация > Пользователи.
Как получить информацию о пользователе, выполнившем вход
Рекомендуемый способ получить текущего пользователя – вызвать метод getCurrentUser.
Если ни один пользователь не вошел в аккаунт, getCurrentUser возвращает значение null:
Kotlin
val user = Firebase.auth.currentUser if (user != null) { // User is signed in } else { // No user is signed in }
Java
FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser(); if (user != null) { // User is signed in } else { // No user is signed in }
В некоторых случаях getCurrentUser возвращает непустое значение FirebaseUser, но базовый токен недействителен. Например, это может произойти, если пользователь был удален на другом устройстве, а локальный токен не был обновлен. В этом случае вы можете получить действительный токен пользователя getCurrentUser, но последующие вызовы аутентифицированных ресурсов будут завершаться с ошибкой.
getCurrentUser также может вернуть null, потому что объект аутентификации не был инициализирован.
Если вы прикрепите AuthStateListener, то будете получать обратный вызов каждый раз, когда меняется состояние базового токена. Это может быть полезно в крайних случаях, подобных описанным выше.
Как получить профиль пользователя
Чтобы получить информацию из профиля пользователя, используйте методы доступа к экземпляру FirebaseUser. Пример:
Kotlin
val user = Firebase.auth.currentUser user?.let { // Name, email address, and profile photo Url val name = it.displayName val email = it.email val photoUrl = it.photoUrl // Check if user's email is verified val emailVerified = it.isEmailVerified // The user's ID, unique to the Firebase project. Do NOT use this value to // authenticate with your backend server, if you have one. Use // FirebaseUser.getIdToken() instead. val uid = it.uid }
Java
FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser(); if (user != null) { // Name, email address, and profile photo Url String name = user.getDisplayName(); String email = user.getEmail(); Uri photoUrl = user.getPhotoUrl(); // Check if user's email is verified boolean emailVerified = user.isEmailVerified(); // The user's ID, unique to the Firebase project. Do NOT use this value to // authenticate with your backend server, if you have one. Use // FirebaseUser.getIdToken() instead. String uid = user.getUid(); }
Как получить информацию о профиле пользователя, относящуюся к определенному поставщику услуг
Чтобы получить информацию профиля, извлеченную из поставщиков услуг входа, связанных с пользователем, используйте метод getProviderData. Пример:
Kotlin
val user = Firebase.auth.currentUser user?.let { for (profile in it.providerData) { // Id of the provider (ex: google.com) val providerId = profile.providerId // UID specific to the provider val uid = profile.uid // Name, email address, and profile photo Url val name = profile.displayName val email = profile.email val photoUrl = profile.photoUrl } }
Java
FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser(); if (user != null) { for (UserInfo profile : user.getProviderData()) { // Id of the provider (ex: google.com) String providerId = profile.getProviderId(); // UID specific to the provider String uid = profile.getUid(); // Name, email address, and profile photo Url String name = profile.getDisplayName(); String email = profile.getEmail(); Uri photoUrl = profile.getPhotoUrl(); } }
Как изменить профиль пользователя
Вы можете обновить основную информацию профиля пользователя – отображаемое имя и URL фото профиля – с помощью метода updateProfile. Пример:
Kotlin
val user = Firebase.auth.currentUser val profileUpdates = userProfileChangeRequest { displayName = "Jane Q. User" photoUri = Uri.parse("https://example.com/jane-q-user/profile.jpg") } user!!.updateProfile(profileUpdates) .addOnCompleteListener { task -> if (task.isSuccessful) { Log.d(TAG, "User profile updated.") } }
Java
FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser(); UserProfileChangeRequest profileUpdates = new UserProfileChangeRequest.Builder() .setDisplayName("Jane Q. User") .setPhotoUri(Uri.parse("https://example.com/jane-q-user/profile.jpg")) .build(); user.updateProfile(profileUpdates) .addOnCompleteListener(new OnCompleteListener<Void>() { @Override public void onComplete(@NonNull Task<Void> task) { if (task.isSuccessful()) { Log.d(TAG, "User profile updated."); } } });
Как задать адрес электронной почты пользователя
Вы можете задать адрес электронной почты пользователя с помощью метода updateEmail. Пример:
Kotlin
val user = Firebase.auth.currentUser user!!.updateEmail("user@example.com") .addOnCompleteListener { task -> if (task.isSuccessful) { Log.d(TAG, "User email address updated.") } }
Java
FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser(); user.updateEmail("user@example.com") .addOnCompleteListener(new OnCompleteListener<Void>() { @Override public void onComplete(@NonNull Task<Void> task) { if (task.isSuccessful()) { Log.d(TAG, "User email address updated."); } } });
Как отправить пользователю письмо с подтверждением
Вы можете отправить пользователю письмо с подтверждением адреса, используя метод sendEmailVerification. Пример:
Kotlin
val user = Firebase.auth.currentUser user!!.sendEmailVerification() .addOnCompleteListener { task -> if (task.isSuccessful) { Log.d(TAG, "Email sent.") } }
Java
FirebaseAuth auth = FirebaseAuth.getInstance(); FirebaseUser user = auth.getCurrentUser(); user.sendEmailVerification() .addOnCompleteListener(new OnCompleteListener<Void>() { @Override public void onComplete(@NonNull Task<Void> task) { if (task.isSuccessful()) { Log.d(TAG, "Email sent."); } } });
Вы можете выбрать, какой шаблон будет использоваться, на вкладке Шаблоны в разделе Безопасность > Аутентификация консоли Firebase. Подробнее о шаблонах электронных писем в Справочном центре Firebase…
Также можно передать состояние через URL продолжения, чтобы перенаправить пользователя обратно в приложение после отправки письма с подтверждением.
Кроме того, вы можете локализовать письмо с подтверждением, обновив код языка в экземпляре Auth перед отправкой письма. Пример:
Kotlin
auth.setLanguageCode("fr") // To apply the default app language instead of explicitly setting it. // auth.useAppLanguage()
Java
auth.setLanguageCode("fr"); // To apply the default app language instead of explicitly setting it. // auth.useAppLanguage();
Как задать пароль пользователя
Вы можете задать пароль пользователя с помощью метода updatePassword. Пример:
Kotlin
val user = Firebase.auth.currentUser val newPassword = "SOME-SECURE-PASSWORD" user!!.updatePassword(newPassword) .addOnCompleteListener { task -> if (task.isSuccessful) { Log.d(TAG, "User password updated.") } }
Java
FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser(); String newPassword = "SOME-SECURE-PASSWORD"; user.updatePassword(newPassword) .addOnCompleteListener(new OnCompleteListener<Void>() { @Override public void onComplete(@NonNull Task<Void> task) { if (task.isSuccessful()) { Log.d(TAG, "User password updated."); } } });
Как отправить письмо для сброса пароля
Вы можете отправить пользователю письмо с инструкциями по сбросу пароля с помощью метода sendPasswordResetEmail. Пример:
Kotlin
val emailAddress = "user@example.com" Firebase.auth.sendPasswordResetEmail(emailAddress) .addOnCompleteListener { task -> if (task.isSuccessful) { Log.d(TAG, "Email sent.") } }
Java
FirebaseAuth auth = FirebaseAuth.getInstance(); String emailAddress = "user@example.com"; auth.sendPasswordResetEmail(emailAddress) .addOnCompleteListener(new OnCompleteListener<Void>() { @Override public void onComplete(@NonNull Task<Void> task) { if (task.isSuccessful()) { Log.d(TAG, "Email sent."); } } });
Вы можете выбрать, какой шаблон будет использоваться, на вкладке Шаблоны в разделе Безопасность > Аутентификация консоли Firebase. Подробнее о шаблонах электронных писем в Справочном центре Firebase…
Также можно передать состояние через URL продолжения, чтобы перенаправить пользователя обратно в приложение при отправке электронного письма для сброса пароля.
Кроме того, вы можете локализовать письмо для сброса пароля, обновив код языка в экземпляре Auth перед отправкой письма. Пример:
Kotlin
auth.setLanguageCode("fr") // To apply the default app language instead of explicitly setting it. // auth.useAppLanguage()
Java
auth.setLanguageCode("fr"); // To apply the default app language instead of explicitly setting it. // auth.useAppLanguage();
Вы также можете отправлять письма для сброса пароля из консоли Firebase.
Как удалить пользователя
Удалить аккаунт пользователя можно с помощью метода delete. Пример:
Kotlin
val user = Firebase.auth.currentUser!! user.delete() .addOnCompleteListener { task -> if (task.isSuccessful) { Log.d(TAG, "User account deleted.") } }
Java
FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser(); user.delete() .addOnCompleteListener(new OnCompleteListener<Void>() { @Override public void onComplete(@NonNull Task<Void> task) { if (task.isSuccessful()) { Log.d(TAG, "User account deleted."); } } });
Вы также можете удалить пользователей в консоли Firebase на вкладке Безопасность > Аутентификация > Пользователи.
Как повторно аутентифицировать пользователя
Для некоторых действий, связанных с безопасностью, например удаления аккаунта, установки основного адреса электронной почты и смены пароля, требуется, чтобы пользователь недавно вошел в аккаунт. Если вы выполните одно из этих действий, а пользователь вошел в аккаунт слишком давно, действие завершится неудачно и будет возвращена ошибка FirebaseAuthRecentLoginRequiredException.
В этом случае повторно аутентифицируйте пользователя, получив новые учетные данные для входа и передав их в reauthenticate. Пример:
Kotlin
val user = Firebase.auth.currentUser!! // Get auth credentials from the user for re-authentication. The example below shows // email and password credentials but there are multiple possible providers, // such as GoogleAuthProvider or FacebookAuthProvider. val credential = EmailAuthProvider .getCredential("user@example.com", "password1234") // Prompt the user to re-provide their sign-in credentials user.reauthenticate(credential) .addOnCompleteListener { Log.d(TAG, "User re-authenticated.") }
Java
FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser(); // Get auth credentials from the user for re-authentication. The example below shows // email and password credentials but there are multiple possible providers, // such as GoogleAuthProvider or FacebookAuthProvider. AuthCredential credential = EmailAuthProvider .getCredential("user@example.com", "password1234"); // Prompt the user to re-provide their sign-in credentials user.reauthenticate(credential) .addOnCompleteListener(new OnCompleteListener<Void>() { @Override public void onComplete(@NonNull Task<Void> task) { Log.d(TAG, "User re-authenticated."); } });
Как импортировать аккаунты пользователей
Вы можете импортировать аккаунты пользователей из файла в проект Firebase, используя команду auth:import Firebase CLI. Пример:
firebase auth:import users.json --hash-algo=scrypt --rounds=8 --mem-cost=14