Аутентификация в Firebase с использованием учетных записей на основе пароля с использованием Javascript

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

Прежде чем начать

  1. Добавьте Firebase в свой проект JavaScript .
  2. Если вы еще не подключили свое приложение к проекту Firebase, сделайте это из консоли Firebase .
  3. Включить вход по электронной почте/паролю:
    1. В консоли Firebase откройте раздел «Аутентификация» .
    2. На вкладке Способ входа включите метод входа с помощью электронной почты и пароля и нажмите Сохранить .

Создайте учетную запись с паролем

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

  1. Когда новый пользователь регистрируется с помощью формы регистрации вашего приложения, выполните все необходимые действия по проверке новой учетной записи, требуемые вашим приложением, например, проверьте, что пароль новой учетной записи введен правильно и соответствует вашим требованиям к сложности.
  2. Создайте новую учетную запись, передав адрес электронной почты и пароль нового пользователя в createUserWithEmailAndPassword :

    Web

    import { getAuth, createUserWithEmailAndPassword } from "firebase/auth";
    
    const auth = getAuth();
    createUserWithEmailAndPassword(auth, email, password)
      .then((userCredential) => {
        // Signed up 
        const user = userCredential.user;
        // ...
      })
      .catch((error) => {
        const errorCode = error.code;
        const errorMessage = error.message;
        // ..
      });

    Web

    firebase.auth().createUserWithEmailAndPassword(email, password)
      .then((userCredential) => {
        // Signed in 
        var user = userCredential.user;
        // ...
      })
      .catch((error) => {
        var errorCode = error.code;
        var errorMessage = error.message;
        // ..
      });
    Если новая учётная запись была создана, пользователь войдет в систему автоматически. Чтобы получить данные о вошедшем в систему пользователе, ознакомьтесь с разделом «Дальнейшие действия» ниже.

    Здесь вы также можете перехватывать и обрабатывать ошибки. Список кодов ошибок см. в справочной документации по аутентификации .

Авторизуйтесь как пользователь, используя адрес электронной почты и пароль.

Действия для входа пользователя с паролем аналогичны действиям по созданию новой учётной записи. На странице входа в приложение выполните следующие действия:

  1. Когда пользователь входит в ваше приложение, передайте адрес электронной почты пользователя и пароль в signInWithEmailAndPassword :

    Web

    import { getAuth, signInWithEmailAndPassword } from "firebase/auth";
    
    const auth = getAuth();
    signInWithEmailAndPassword(auth, email, password)
      .then((userCredential) => {
        // Signed in 
        const user = userCredential.user;
        // ...
      })
      .catch((error) => {
        const errorCode = error.code;
        const errorMessage = error.message;
      });

    Web

    firebase.auth().signInWithEmailAndPassword(email, password)
      .then((userCredential) => {
        // Signed in
        var user = userCredential.user;
        // ...
      })
      .catch((error) => {
        var errorCode = error.code;
        var errorMessage = error.message;
      });
    Ознакомьтесь с разделом «Дальнейшие шаги» ниже, чтобы получить данные вошедшего в систему пользователя.

    Здесь вы также можете перехватывать и обрабатывать ошибки. Список кодов ошибок см. в справочной документации по аутентификации .

Рекомендуется: установить политику паролей

Вы можете повысить безопасность учетной записи, установив требования к сложности пароля.

Чтобы настроить политику паролей для вашего проекта, откройте вкладку «Политика паролей» на странице «Параметры аутентификации» консоли Firebase :

Настройки аутентификации

Политики паролей Firebase Authentication поддерживают следующие требования к паролям:

  • Требуется строчная буква

  • Требуется заглавный символ

  • Требуется числовой символ

  • Требуется небуквенно-цифровой символ

    Следующие символы удовлетворяют требованию не быть буквенно-цифровыми: ^ $ * . [ ] { } ( ) ? " ! @ # % & / \ , > < ' : ; | _ ~

  • Минимальная длина пароля (от 6 до 30 символов; по умолчанию — 6)

  • Максимальная длина пароля (максимальная длина 4096 символов)

Вы можете включить принудительное применение политики паролей в двух режимах:

  • Требовать : попытки зарегистрироваться будут безуспешными до тех пор, пока пользователь не обновит пароль, соответствующий вашей политике.

  • Уведомление : пользователям разрешено регистрироваться с несоответствующим паролем. При использовании этого режима необходимо проверить пароль пользователя на стороне клиента на соответствие политике и каким-либо образом предложить пользователю обновить пароль, если он не соответствует.

Новым пользователям всегда необходимо выбирать пароль, соответствующий вашей политике.

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

Проверка пароля на клиенте

import { getAuth, validatePassword } from "firebase/auth";
const status = await validatePassword(getAuth(), passwordFromUser);
if (!status.isValid) {
  // Password could not be validated. Use the status to show what
  // requirements are met and which are missing.

  // If a criterion is undefined, it is not required by policy. If the
  // criterion is defined but false, it is required but not fulfilled by
  // the given password. For example:
  const needsLowerCase = status.containsLowercaseLetter !== true;
}

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

Некоторые методы Firebase Authentication , принимающие адреса электронной почты в качестве параметров, вызывают определённые ошибки, если адрес электронной почты не зарегистрирован, хотя он должен быть зарегистрирован (например, при входе с адресом электронной почты и паролем), или зарегистрирован, хотя он не должен использоваться (например, при изменении адреса электронной почты пользователя). Хотя это может быть полезно для предложения пользователям конкретных мер по устранению проблем, злоумышленники также могут использовать это для получения адресов электронной почты, зарегистрированных вашими пользователями.

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

Следующие шаги

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

  • В ваших приложениях рекомендуемый способ узнать статус аутентификации пользователя — установить наблюдателя для объекта Auth . После этого вы сможете получить основную информацию о профиле пользователя из объекта User . См. раздел Управление пользователями .

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

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

Чтобы выйти из системы пользователя, вызовите signOut :

Web

import { getAuth, signOut } from "firebase/auth";

const auth = getAuth();
signOut(auth).then(() => {
  // Sign-out successful.
}).catch((error) => {
  // An error happened.
});

Web

firebase.auth().signOut().then(() => {
  // Sign-out successful.
}).catch((error) => {
  // An error happened.
});