Вы можете использовать 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.14.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 смогут полагаться на основной модуль библиотеки (подробности см. в разделе часто задаваемых вопросов об этой инициативе ).(Альтернатива) Добавьте зависимости библиотеки 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.2.1") }
Создайте учетную запись с паролем
Чтобы создать новую учетную запись пользователя с паролем, выполните следующие действия при входе в приложение:
- В методе
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 символов)
Вы можете включить принудительное применение политики паролей в двух режимах:
Требовать : попытки зарегистрироваться будут безуспешными, пока пользователь не обновит пароль, соответствующий вашей политике.
Notify : Пользователям разрешено регистрироваться с несоответствующим паролем. При использовании этого режима следует проверить, соответствует ли пароль пользователя политике на стороне клиента, и каким-либо образом предложить пользователю обновить свой пароль, если он не соответствует.
Новым пользователям всегда необходимо выбирать пароль, соответствующий вашей политике.
Если у вас есть активные пользователи, мы рекомендуем не включать принудительное обновление при входе, если вы не собираетесь блокировать доступ пользователям, чьи пароли не соответствуют вашей политике. Вместо этого используйте режим уведомления, который позволяет пользователям входить в систему с их текущими паролями, и информируйте их о требованиях, которых не хватает их паролю.
Рекомендуется: включить защиту от перечисления адресов электронной почты
Некоторые методы Firebase Authentication , которые принимают адреса электронной почты в виде параметров, допускают конкретные ошибки, если адрес электронной почты не зарегистрирован, когда он должен быть зарегистрирован (например, при входе с адресом электронной почты и паролем) или зарегистрирован, когда он должен быть неиспользованным (например, при изменении адреса электронной почты пользователя). Несмотря на то, что это может быть полезно для предложения конкретных средств правовой защиты для пользователей, вредоносные актеры также могут подвергнуться злоупотреблениям, чтобы обнаружить адреса электронной почты, зарегистрированные вашими пользователями.
Чтобы снизить этот риск, мы рекомендуем вам включить защиту перечисления адресов электронной почты для вашего проекта с помощью инструмента Google Cloud gcloud
. Обратите внимание, что включение этой функции изменяет поведение Firebase Authentication при сообщении об ошибках: убедитесь, что ваше приложение не полагается на более конкретные ошибки.
Следующие шаги
После того, как пользователь вошел в систему в первый раз, создается новая учетная запись пользователя, которая связывается с учетными данными, то есть именем пользователя и паролем, номером телефона или информацией поставщика аутентификации, с которыми пользователь вошел в систему. Эта новая учетная запись хранится как часть вашего проекта Firebase и может использоваться для идентификации пользователя в каждом приложении в вашем проекте, независимо от того, как пользователь входит в систему.
В своих приложениях вы можете получить основную информацию о профиле пользователя из объекта
FirebaseUser
. См. Управление пользователями .В правилах безопасности Firebase Realtime Database и Cloud Storage вы можете получить уникальный идентификатор вошедшего в систему пользователя из переменной
auth
и использовать его для управления данными, к которым пользователь может получить доступ.
Вы можете разрешить пользователям входить в ваше приложение с использованием нескольких поставщиков аутентификации, связав учетные данные поставщика аутентификации с существующей учетной записью пользователя.
Чтобы выйти из системы пользователя, вызовите signOut
:
Kotlin
Firebase.auth.signOut()
Java
FirebaseAuth.getInstance().signOut();