Вы можете использовать Firebase Authentication, чтобы ваши пользователи могли проходить аутентификацию в Firebase, используя свои адреса электронной почты и пароли, а также управлять учетными записями вашего приложения на основе паролей.
Прежде чем вы начнете
Если вы еще этого не сделали, добавьте Firebase в свой проект Android .
- Если вы еще не подключили свое приложение к проекту Firebase, сделайте это из консоли Firebase .
- Включить вход по электронной почте/паролю:
- В консоли Firebase откройте раздел Auth .
- На вкладке «Метод входа» включите метод входа по электронной почте/паролю и нажмите «Сохранить» .
В файле Gradle вашего модуля (на уровне приложения) (обычно
<project>/<app-module>/build.gradle.kts
или<project>/<app-module>/build.gradle
) добавьте зависимость для проверки подлинности Firebase. Android-библиотека. Мы рекомендуем использовать Firebase Android BoM для управления версиями библиотеки.Kotlin+KTX
dependencies { // Import the BoM for the Firebase platform implementation(platform("com.google.firebase:firebase-bom:32.3.1")) // 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-ktx") }
Используя 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-ktx:22.1.2") }
Java
dependencies { // Import the BoM for the Firebase platform implementation(platform("com.google.firebase:firebase-bom:32.3.1")) // 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:22.1.2") }
Создайте учетную запись на основе пароля
Чтобы создать новую учетную запись пользователя с паролем, выполните следующие действия в процессе входа в приложение:
- В методе
onCreate
действия регистрации получите общий экземпляр объектаFirebaseAuth
:Kotlin+KTX
private lateinit var auth: FirebaseAuth // ... // Initialize Firebase Auth auth = Firebase.auth
Java
private FirebaseAuth mAuth; // ... // Initialize Firebase Auth mAuth = FirebaseAuth.getInstance();
- При инициализации Activity проверьте, вошел ли пользователь в данный момент:
Kotlin+KTX
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+KTX
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+KTX
private lateinit var auth: FirebaseAuth // ... // Initialize Firebase Auth auth = Firebase.auth
Java
private FirebaseAuth mAuth; // ... // Initialize Firebase Auth mAuth = FirebaseAuth.getInstance();
- При инициализации Activity проверьте, вошел ли пользователь в данный момент:
Kotlin+KTX
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+KTX
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, которые принимают адреса электронной почты в качестве параметров, выдают определенные ошибки, если адрес электронной почты не зарегистрирован, когда он должен быть зарегистрирован (например, при входе с адресом электронной почты и паролем), или зарегистрирован, когда он не должен использоваться (например, при изменении адреса электронной почты пользователя). Хотя это может быть полезно для предложения конкретных средств защиты пользователям, злоумышленники также могут использовать его для обнаружения адресов электронной почты, зарегистрированных вашими пользователями.
Чтобы снизить этот риск, мы рекомендуем вам включить защиту перечисления электронной почты для вашего проекта с помощью инструмента Google Cloud gcloud
. Обратите внимание, что включение этой функции изменяет поведение отчетов об ошибках аутентификации Firebase: убедитесь, что ваше приложение не полагается на более конкретные ошибки.
Следующие шаги
После того, как пользователь входит в систему в первый раз, создается новая учетная запись пользователя и связывается с учетными данными, т. е. с именем пользователя и паролем, номером телефона или информацией о поставщике проверки подлинности, с которыми пользователь вошел в систему. Эта новая учетная запись хранится как часть вашего проекта Firebase и может использоваться для идентификации пользователя во всех приложениях вашего проекта, независимо от того, как пользователь входит в систему.
В своих приложениях вы можете получить основную информацию о профиле пользователя из объекта
FirebaseUser
. См. Управление пользователями .В правилах безопасности базы данных Firebase Realtime и облачного хранилища вы можете получить уникальный идентификатор пользователя, вошедшего в систему, из переменной
auth
и использовать его для управления тем, к каким данным пользователь может получить доступ.
Вы можете разрешить пользователям входить в ваше приложение с помощью нескольких поставщиков проверки подлинности, связав учетные данные поставщика проверки подлинности с существующей учетной записью пользователя.
Чтобы выйти из системы, вызовите signOut
:
Kotlin+KTX
Firebase.auth.signOut()
Java
FirebaseAuth.getInstance().signOut();