Вы можете использовать Firebase Authentication чтобы позволить вашим пользователям аутентифицироваться в Firebase, используя их адреса электронной почты и пароли, а также управлять учетными записями вашего приложения на основе паролей.
Прежде чем начать
Если вы еще этого не сделали, добавьте Firebase в свой проект Android .
- Если вы еще не подключили свое приложение к проекту Firebase, сделайте это из консоли Firebase .
- Включите вход по электронной почте/паролю:
- В консоли Firebase откройте раздел Auth .
- На вкладке «Метод входа » включите метод входа по электронной почте и паролю и нажмите «Сохранить» .
В файле 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:33.7.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.
Ищете библиотечный модуль, специфичный для Kotlin? Начиная с октября 2023 года ( Firebase BoM 32.5.0) от основного модуля библиотеки могут зависеть как разработчики Kotlin, так и Java (подробнее см. FAQ по этой инициативе ).(Альтернатива) Добавить зависимости библиотеки 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:23.1.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();
- При инициализации вашей активности проверьте, вошел ли пользователь в систему:
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();
- При инициализации вашей активности проверьте, вошел ли пользователь в систему:
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
. См. Управление пользователями .В правилах безопасности базы данных реального времени и Cloud Storage Firebase Realtime Database вы можете получить уникальный идентификатор пользователя, вошедшего в систему, из переменной
auth
и использовать его для управления тем, к каким данным пользователь может получить доступ.
Вы можете разрешить пользователям входить в ваше приложение с использованием нескольких поставщиков аутентификации, связав учетные данные поставщика аутентификации с существующей учетной записью пользователя.
Чтобы выйти из системы, вызовите signOut
:
Kotlin
Firebase.auth.signOut()
Java
FirebaseAuth.getInstance().signOut();