Как выполнять аутентификацию в Firebase с помощью аккаунтов на основе пароля в Android

С помощью Firebase Authentication можно разрешить пользователям выполнять аутентификацию в Firebase, используя адреса электронной почты и пароли, а также управлять аккаунтами на основе паролей в приложении.

Чтобы получить помощь от ИИ, скопируйте приведенный ниже запрос в ИИ-агента для программирования (например, Gemini в Android Studio, Antigravity, Claude Code, Codex и Cursor). Вы можете изменить запрос и попросить агента переделать изображение. Подробную информацию об установке можно найти в разделе Навыки агента Firebase.

Help me use Firebase in my app.
1. Make sure that **Firebase agent skills** are installed and updated. For Claude Code, Codex, or Cursor agents, help me install the Firebase plugin. For other agents, run `npx skills add firebase/agent-skills`. Always try to use **Firebase agent skills** for Firebase-related tasks.
2. Help me set up and use Firebase Authentication with email and password authentication in my app.

Подготовка

  1. Если вы ещё этого не сделали, добавьте Firebase в проект для Android.

  2. Если вы ещё не подключили приложение к проекту Firebase, сделайте это в консоли Firebase.
  3. Включите в проекте Firebase вход с адресом электронной почты и паролем:
    1. В консоли Firebase выберите Безопасность > Аутентификация.
    2. На вкладке Sign-in method (Способ входа) включите поставщика Email/password (Электронная почта/пароль).
    3. Нажмите Сохранить.
  4. В файле 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:35.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:25.0.0")
    }

Как создать аккаунт с паролем

Чтобы создать новый аккаунт пользователя с паролем, выполните следующие действия в окне входа в приложение:

  1. В методе onCreate своего объекта activity для регистрации получите общий экземпляр объекта FirebaseAuth:

    Kotlin

    private lateinit var auth: FirebaseAuth
    // ...
    // Initialize Firebase Auth
    auth = Firebase.auth

    Java

    private FirebaseAuth mAuth;
    // ...
    // Initialize Firebase Auth
    mAuth = FirebaseAuth.getInstance();
  2. При инициализации 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();
        }
    }
  3. Когда новый пользователь регистрируется с помощью формы в вашем приложении, выполните все необходимые шаги для проверки нового аккаунта, например убедитесь, что пароль введен правильно и соответствует требованиям к сложности.
  4. Создайте новый аккаунт, передав адрес электронной почты и пароль нового пользователя в 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, чтобы получить данные аккаунта пользователя.

Как войти в аккаунт с помощью адреса электронной почты и пароля

Шаги для входа пользователя с паролем похожи на шаги для создания нового аккаунта. В журнале входов в приложение выполните следующие действия:

  1. В методе onCreate своего объекта activity для входа получите общий экземпляр объекта FirebaseAuth:

    Kotlin

    private lateinit var auth: FirebaseAuth
    // ...
    // Initialize Firebase Auth
    auth = Firebase.auth

    Java

    private FirebaseAuth mAuth;
    // ...
    // Initialize Firebase Auth
    mAuth = FirebaseAuth.getInstance();
  2. При инициализации 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();
        }
    }
  3. Когда пользователь входит в ваше приложение, передайте его адрес электронной почты и пароль в 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, которые принимают адреса электронной почты в качестве параметров, выдают определенные ошибки, если адрес электронной почты не зарегистрирован, когда он должен быть зарегистрирован (например, при входе с использованием адреса электронной почты и пароля), или зарегистрирован, когда он должен быть неиспользованным (например, при изменении адреса электронной почты пользователя). Это может быть полезно для предоставления пользователям конкретных рекомендаций, но злоумышленники могут использовать эту функцию, чтобы узнавать адреса электронной почты, зарегистрированные вашими пользователями.

Чтобы снизить этот риск, рекомендуем включить защиту от перечисления адресов электронной почты для вашего проекта. Проверить эту настройку можно в консоли Firebase: выберите Безопасность > Аутентификация > вкладка Настройки и нажмите Действия пользователя.

Обратите внимание, что при включении этой функции меняется поведение при регистрации ошибок для Firebase Authentication, поэтому убедитесь, что ваше приложение не полагается на более конкретные ошибки.

Дальнейшие действия

После первого входа пользователя создается новый аккаунт, связанный с учетными данными, которые он использовал (именем пользователя и паролем, номером телефона или информацией поставщика услуг аутентификации). Этот новый аккаунт хранится в проекте Firebase и позволяет идентифицировать пользователя во всех приложениях проекта независимо от того, как он вошел в аккаунт.

  • В своих приложениях вы можете получить основную информацию профиля пользователя из объекта FirebaseUser. Подробнее о том, как управлять пользователями…

  • В Firebase Realtime Database и Cloud Storage правилах безопасности можно получить уникальный идентификатор пользователя, выполнившего вход, из переменной auth и использовать его, чтобы контролировать, к каким данным у пользователя есть доступ.

Вы можете разрешить пользователям входить в ваше приложение, используя несколько поставщиков услуг аутентификации, связав учетные данные поставщика услуг аутентификации с существующим аккаунтом пользователя.

Чтобы выйти из аккаунта пользователя, вызовите функцию signOut:

Kotlin

Firebase.auth.signOut()

Java

FirebaseAuth.getInstance().signOut();