Вы можете использовать Firebase Authentication , чтобы разрешить вашим пользователям проходить аутентификацию в Firebase, используя свои адреса электронной почты и пароли, а также управлять учетными записями вашего приложения на основе паролей.
Прежде чем начать
Если вы еще этого не сделали, добавьте Firebase в свой Android-проект .
- Если вы еще не подключили свое приложение к проекту Firebase, сделайте это из консоли Firebase .
- Включить вход по электронной почте/паролю:
- В консоли Firebase откройте раздел «Аутентификация» .
- На вкладке Способ входа включите метод входа с помощью электронной почты и пароля и нажмите Сохранить .
В файле Gradle вашего модуля (уровня приложения) (обычно
<project>/<app-module>/build.gradle.kts
или<project>/<app-module>/build.gradle
) добавьте зависимость для библиотеки Firebase Authentication для Android. Мы рекомендуем использовать Firebase Android BoM для управления версиями библиотеки.dependencies { // Import the BoM for the Firebase platform implementation(platform("com.google.firebase:firebase-bom:34.0.0")) // Add the dependency for the Firebase Authentication library // When using the BoM, you don't specify versions in Firebase library dependencies implementation("com.google.firebase:firebase-auth") }
Используя Firebase Android BoM , ваше приложение всегда будет использовать совместимые версии библиотек Firebase Android.
(Альтернатива) Добавьте зависимости библиотеки Firebase без использования BoM
Если вы решите не использовать Firebase BoM , вам необходимо указать каждую версию библиотеки Firebase в строке ее зависимостей.
Обратите внимание: если вы используете в своем приложении несколько библиотек Firebase, мы настоятельно рекомендуем использовать BoM для управления версиями библиотек, что гарантирует совместимость всех версий.
dependencies { // Add the dependency for the Firebase Authentication library // When NOT using the BoM, you must specify versions in Firebase library dependencies implementation("com.google.firebase:firebase-auth:24.0.0") }
Создайте учетную запись с паролем
Чтобы создать новую учетную запись пользователя с паролем, выполните следующие шаги при входе в приложение:
- В методе
onCreate
вашей активности регистрации получите общий экземпляр объектаFirebaseAuth
:Kotlin
private lateinit var auth: FirebaseAuth // ... // Initialize Firebase Auth auth = Firebase.auth
Java
private FirebaseAuth mAuth; // ... // Initialize Firebase Auth mAuth = FirebaseAuth.getInstance();
- При инициализации Activity проверьте, вошел ли пользователь в систему:
Kotlin
public override fun onStart() { super.onStart() // Check if user is signed in (non-null) and update UI accordingly. val currentUser = auth.currentUser if (currentUser != null) { reload() } }
Java
@Override public void onStart() { super.onStart(); // Check if user is signed in (non-null) and update UI accordingly. FirebaseUser currentUser = mAuth.getCurrentUser(); if(currentUser != null){ reload(); } }
- Когда новый пользователь регистрируется с помощью формы регистрации вашего приложения, выполните все необходимые действия по проверке новой учетной записи, требуемые вашим приложением, например, проверьте, что пароль новой учетной записи введен правильно и соответствует вашим требованиям к сложности.
- Создайте новую учетную запись, передав адрес электронной почты и пароль нового пользователя в
createUserWithEmailAndPassword
:Если была создана новая учетная запись, пользователь также войдет в систему. В обратном вызове можно использовать методKotlin
auth.createUserWithEmailAndPassword(email, password) .addOnCompleteListener(this) { task -> if (task.isSuccessful) { // Sign in success, update UI with the signed-in user's information Log.d(TAG, "createUserWithEmail:success") val user = auth.currentUser updateUI(user) } else { // If sign in fails, display a message to the user. Log.w(TAG, "createUserWithEmail:failure", task.exception) Toast.makeText( baseContext, "Authentication failed.", Toast.LENGTH_SHORT, ).show() updateUI(null) } }
Java
mAuth.createUserWithEmailAndPassword(email, password) .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() { @Override public void onComplete(@NonNull Task<AuthResult> task) { if (task.isSuccessful()) { // Sign in success, update UI with the signed-in user's information Log.d(TAG, "createUserWithEmail:success"); FirebaseUser user = mAuth.getCurrentUser(); updateUI(user); } else { // If sign in fails, display a message to the user. Log.w(TAG, "createUserWithEmail:failure", task.getException()); Toast.makeText(EmailPasswordActivity.this, "Authentication failed.", Toast.LENGTH_SHORT).show(); updateUI(null); } } });
getCurrentUser
для получения данных учетной записи пользователя.
Авторизуйтесь как пользователь, используя адрес электронной почты и пароль.
Действия для входа пользователя с паролем аналогичны действиям по созданию новой учётной записи. В разделе входа в приложение выполните следующие действия:
- В методе
onCreate
действия входа получите общий экземпляр объектаFirebaseAuth
:Kotlin
private lateinit var auth: FirebaseAuth // ... // Initialize Firebase Auth auth = Firebase.auth
Java
private FirebaseAuth mAuth; // ... // Initialize Firebase Auth mAuth = FirebaseAuth.getInstance();
- При инициализации Activity проверьте, вошел ли пользователь в систему:
Kotlin
public override fun onStart() { super.onStart() // Check if user is signed in (non-null) and update UI accordingly. val currentUser = auth.currentUser if (currentUser != null) { reload() } }
Java
@Override public void onStart() { super.onStart(); // Check if user is signed in (non-null) and update UI accordingly. FirebaseUser currentUser = mAuth.getCurrentUser(); if(currentUser != null){ reload(); } }
- Когда пользователь входит в ваше приложение, передайте адрес электронной почты пользователя и пароль в
signInWithEmailAndPassword
:Если вход прошел успешно, вы можете использовать возвращенныйKotlin
auth.signInWithEmailAndPassword(email, password) .addOnCompleteListener(this) { task -> if (task.isSuccessful) { // Sign in success, update UI with the signed-in user's information Log.d(TAG, "signInWithEmail:success") val user = auth.currentUser updateUI(user) } else { // If sign in fails, display a message to the user. Log.w(TAG, "signInWithEmail:failure", task.exception) Toast.makeText( baseContext, "Authentication failed.", Toast.LENGTH_SHORT, ).show() updateUI(null) } }
Java
mAuth.signInWithEmailAndPassword(email, password) .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() { @Override public void onComplete(@NonNull Task<AuthResult> task) { if (task.isSuccessful()) { // Sign in success, update UI with the signed-in user's information Log.d(TAG, "signInWithEmail:success"); FirebaseUser user = mAuth.getCurrentUser(); updateUI(user); } else { // If sign in fails, display a message to the user. Log.w(TAG, "signInWithEmail:failure", task.getException()); Toast.makeText(EmailPasswordActivity.this, "Authentication failed.", Toast.LENGTH_SHORT).show(); updateUI(null); } } });
FirebaseUser
для продолжения.
Рекомендуется: установить политику паролей
Вы можете повысить безопасность учетной записи, установив требования к сложности пароля.
Чтобы настроить политику паролей для вашего проекта, откройте вкладку «Политика паролей» на странице «Параметры аутентификации» консоли Firebase :
Политики паролей Firebase Authentication поддерживают следующие требования к паролям:
Требуется строчная буква
Требуется заглавный символ
Требуется числовой символ
Требуется небуквенно-цифровой символ
Следующие символы удовлетворяют требованию не быть буквенно-цифровыми:
^ $ * . [ ] { } ( ) ? " ! @ # % & / \ , > < ' : ; | _ ~
Минимальная длина пароля (от 6 до 30 символов; по умолчанию — 6)
Максимальная длина пароля (максимальная длина 4096 символов)
Вы можете включить принудительное применение политики паролей в двух режимах:
Требовать : попытки зарегистрироваться будут безуспешными до тех пор, пока пользователь не обновит пароль, соответствующий вашей политике.
Уведомление : пользователям разрешено регистрироваться с несоответствующим паролем. При использовании этого режима необходимо проверить пароль пользователя на стороне клиента на соответствие политике и каким-либо образом предложить пользователю обновить пароль, если он не соответствует.
Новым пользователям всегда необходимо выбирать пароль, соответствующий вашей политике.
Если у вас есть активные пользователи, мы рекомендуем не включать принудительное обновление при входе, если только вы не собираетесь блокировать доступ пользователям, чьи пароли не соответствуют вашей политике. Вместо этого используйте режим уведомлений, который позволяет пользователям входить в систему с их текущими паролями, и сообщайте им о требованиях, которым не соответствует их пароль.
Рекомендуется: включить защиту от перечисления адресов электронной почты
Некоторые методы Firebase Authentication , принимающие адреса электронной почты в качестве параметров, вызывают определённые ошибки, если адрес электронной почты не зарегистрирован, хотя он должен быть зарегистрирован (например, при входе с адресом электронной почты и паролем), или зарегистрирован, хотя он не должен использоваться (например, при изменении адреса электронной почты пользователя). Хотя это может быть полезно для предложения пользователям конкретных мер по устранению проблем, злоумышленники также могут использовать это для получения адресов электронной почты, зарегистрированных вашими пользователями.
Чтобы снизить этот риск, мы рекомендуем включить защиту от перечисления адресов электронной почты для вашего проекта с помощью инструмента Google Cloud gcloud
. Обратите внимание, что включение этой функции изменяет поведение Firebase Authentication при отправке сообщений об ошибках: убедитесь, что ваше приложение не использует более конкретные ошибки.
Следующие шаги
После первого входа пользователя в систему создаётся новая учётная запись, которая привязывается к учётным данным, использованным при входе (имя пользователя и пароль, номер телефона или информация о поставщике аутентификации). Эта новая учётная запись хранится в вашем проекте Firebase и может использоваться для идентификации пользователя в каждом приложении проекта, независимо от способа входа.
В своих приложениях вы можете получить основную информацию о профиле пользователя из объекта
FirebaseUser
. См. раздел Управление пользователями .В правилах безопасности Firebase Realtime Database и Cloud Storage вы можете получить уникальный идентификатор вошедшего в систему пользователя из переменной
auth
и использовать его для управления данными, к которым пользователь может получить доступ.
Вы можете разрешить пользователям входить в ваше приложение с использованием нескольких поставщиков аутентификации, связав учетные данные поставщика аутентификации с существующей учетной записью пользователя.
Чтобы выйти из системы пользователя, вызовите signOut
:
Kotlin
Firebase.auth.signOut()
Java
FirebaseAuth.getInstance().signOut();