Подключите свое приложение к эмулятору аутентификации

Прежде чем использовать эмулятор аутентификации в своем приложении, убедитесь, что вы понимаете общий рабочий процесс Firebase Local Emulator Suite , а также что вы устанавливаете и настраиваете Local Emulator Suite и проверяете его команды интерфейса командной строки .

Что я могу сделать с эмулятором аутентификации?

Эмулятор аутентификации обеспечивает высокоточную локальную эмуляцию сервисов Firebase Authentication, предоставляя большую часть функций, имеющихся в рабочей версии Firebase Authentication . В сочетании с платформами Apple, Android и Web Firebase SDK эмулятор позволяет:

  • Создавайте, обновляйте и управляйте эмулированными учетными записями пользователей для проверки электронной почты/пароля, номера телефона/SMS и входа с помощью сторонних поставщиков удостоверений (например, Google).
  • Просмотр и редактирование эмулируемых пользователей
  • Проверьте сообщения, связанные с проверкой подлинности, на вкладке Журналы пользовательского интерфейса эмулятора.

Выберите проект Firebase

Firebase Local Emulator Suite эмулирует продукты для одного проекта Firebase.

Чтобы выбрать проект для использования, перед запуском эмуляторов в CLI запустите firebase use в своем рабочем каталоге. Или вы можете передать флаг --project каждой команде эмулятора.

Local Emulator Suite поддерживает эмуляцию реальных проектов Firebase и демонстрационных проектов.

Тип проекта Функции Использование с эмуляторами
Настоящий

Настоящий проект Firebase — это тот, который вы создали и настроили (скорее всего, через консоль Firebase).

Реальные проекты имеют активные ресурсы, такие как экземпляры базы данных, сегменты хранилища, функции или любые другие ресурсы, которые вы настроили для этого проекта Firebase.

При работе с реальными проектами Firebase вы можете запускать эмуляторы для любого или всех поддерживаемых продуктов.

Для любых продуктов, которые вы не эмулируете, ваши приложения и код будут взаимодействовать с активным ресурсом (экземпляром базы данных, сегментом хранилища, функцией и т. д.).

Демо

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

Идентификаторы проектов для демонстрационных проектов имеют префикс demo- .

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

Мы рекомендуем вам использовать демонстрационные проекты везде, где это возможно. Преимущества включают в себя:

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

Настройте свое приложение для взаимодействия с эмулятором аутентификации.

Android, iOS и веб-SDK

Настройте конфигурацию в приложении или тестовые классы для взаимодействия с эмулятором аутентификации следующим образом.

Андроид
FirebaseAuth.getInstance().useEmulator('10.0.2.2', 9099);
Быстрый
Auth.auth().useEmulator(withHost:"localhost", port:9099)

Веб-версия 9

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

const auth = getAuth();
connectAuthEmulator(auth, "http://localhost:9099");

Веб-версия 8

const auth = firebase.auth();
auth.useEmulator("http://localhost:9099");

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

Административный SDK

Firebase Admin SDK автоматически подключается к эмулятору аутентификации, когда установлена ​​переменная среды FIREBASE_AUTH_EMULATOR_HOST .

export FIREBASE_AUTH_EMULATOR_HOST="localhost:9099"

Обратите внимание, что эмулятор облачных функций автоматически распознает эмулятор проверки подлинности, поэтому вы можете пропустить этот шаг при тестировании интеграции между облачными функциями и эмуляторами проверки подлинности. Переменная среды будет автоматически установлена ​​для Admin SDK в Cloud Functions.

С установленной переменной среды Firebase Admin SDK будет принимать неподписанные токены идентификаторов и файлы cookie сеанса, созданные эмулятором аутентификации (через verifyIdToken и createSessionCookie соответственно), чтобы облегчить локальную разработку и тестирование. Убедитесь, что переменная среды не установлена ​​в рабочей среде.

При подключении к эмулятору аутентификации вам потребуется указать ID проекта. Вы можете передать идентификатор проекта напрямую в initializeApp или установить переменную среды GCLOUD_PROJECT . Обратите внимание, что вам не нужно использовать свой настоящий идентификатор проекта Firebase; эмулятор аутентификации примет любой идентификатор проекта.

Пакет SDK для администрирования Node.js
admin.initializeApp({ projectId: "your-project-id" });
Переменная среды
export GCLOUD_PROJECT="your-project-id"

Идентификационные токены

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

Чтобы начать интерактивное прототипирование с помощью эмулятора аутентификации и пользовательского интерфейса Emulator Suite, запустите Firebase Local Emulator Suite.

firebase emulators:start

Для анонимной аутентификации ваше приложение может использовать логику входа для вашей платформы ( iOS , Android , Интернет ).

Для проверки подлинности по электронной почте/паролю вы можете начать создание прототипа, добавив учетные записи пользователей в эмулятор проверки подлинности из своего приложения с помощью методов SDK проверки подлинности или с помощью пользовательского интерфейса Emulator Suite.

  1. В пользовательском интерфейсе Emulator Suite щелкните вкладку Аутентификация .
  2. Нажмите кнопку Добавить пользователя .
  3. Следуйте указаниям мастера создания учетной записи пользователя, заполнив поля аутентификации электронной почты.

Создав тестового пользователя, ваше приложение может входить и выходить из него с помощью логики SDK для вашей платформы ( iOS , Android , Интернет ).

Для проверки проверки электронной почты/входа в систему с потоками ссылок электронной почты эмулятор печатает URL-адрес терминала, на котором были выполнены firebase emulators:start .

i  To verify the email address customer@ex.com, follow this link:
http://localhost:9099/emulator/action?mode=verifyEmail&lang=en&oobCode=XYZ123&apiKey=fake-api-key

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

{
  "authEmulator": {
    "success": "The email has been successfully verified.",
    "email": "customer@example.com"
  }
}

Для проверки сброса пароля эмулятор выводит аналогичный URL-адрес, включая параметр newPassword (который при необходимости можно изменить), на терминал.

http://localhost:9099/emulator/action?mode=resetPassword&oobCode=XYZ!23&apiKey=fake-api-key&newPassword=YOUR_NEW_PASSWORD

Неинтерактивное тестирование

Вместо использования пользовательского интерфейса Emulator Suite или клиентского кода для управления учетными записями пользователей электронной почты и паролей вы можете написать сценарии тестовой настройки, которые вызывают REST API для создания и удаления учетных записей пользователей и получения внеполосных кодов проверки электронной почты для заполнения проверки электронной почты эмулятора. URL. Это разделяет платформу и тестовый код и позволяет проводить тестирование не в интерактивном режиме.

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

  1. Создайте пользователей с конечной точкой REST signUp Authentication.
  2. Войдите в систему пользователей, используя адреса электронной почты и пароли для выполнения тестов.
  3. Если это применимо к вашим тестам, извлеките доступные внеполосные коды подтверждения электронной почты из конечного пункта REST для конкретного эмулятора .
  4. Сбросьте пользовательские записи с конечной точкой REST для эмулятора для очистки данных.

Эмуляция аутентификации по телефону/SMS

Для аутентификации по телефону эмулятор аутентификации не поддерживает:

  • потоки reCAPTCHA и APN. После настройки для взаимодействия с эмулятором клиентские SDK отключают эти методы проверки способом, аналогичным описанному для интеграционного тестирования ( iOS , Android , веб ).
  • Протестируйте телефонные номера с кодами, предварительно настроенными в консоли Firebase.

В остальном, с точки зрения клиентского кода, поток аутентификации по телефону/SMS идентичен описанному для рабочей среды ( iOS , Android , веб ).

Использование пользовательского интерфейса Emulator Suite:

  1. В пользовательском интерфейсе Emulator Suite щелкните вкладку Аутентификация .
  2. Нажмите кнопку Добавить пользователя .
  3. Следуйте указаниям мастера создания учетной записи пользователя, заполнив поля аутентификации телефона.

Однако для потоков аутентификации по телефону эмулятор НЕ будет инициировать доставку каких-либо текстовых сообщений, поскольку связь с оператором связи выходит за рамки и не подходит для локального тестирования! Вместо этого эмулятор распечатывает код, который был бы отправлен по SMS на тот же терминал, на котором вы запускали firebase emulators:start ; введите этот код в приложение, чтобы имитировать пользователей, проверяющих свои текстовые сообщения.

Неинтерактивное тестирование

Для неинтерактивного тестирования проверки подлинности телефона используйте REST API эмулятора проверки подлинности для получения доступных кодов SMS. Обратите внимание, что каждый раз, когда вы инициируете поток, код меняется.

Типичная последовательность следующая.

  1. Позвоните на платформу signInWithPhoneNumber , чтобы начать процесс проверки.
  2. Получите код подтверждения, используя конечную точку REST для эмулятора .
  3. Как обычно, вызовите confirmationResult.confirm(code) с проверочным кодом.

Эмуляция аутентификации стороннего поставщика удостоверений (IDP)

Эмулятор аутентификации позволяет тестировать множество сторонних потоков аутентификации в iOS, Android или веб-приложениях без каких-либо изменений по сравнению с производственным кодом. Примеры потоков проверки подлинности см. в документации для различных комбинаций поставщиков и платформ, которые вы можете использовать в своем приложении .

Вообще говоря, вы можете использовать Firebase SDK для аутентификации одним из двух способов:

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

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

Тестирование потоков IDP на основе Firebase SDK

Если ваше приложение использует какой-либо сквозной поток Firebase SDK, например OAuthProvider для входа в Microsoft, GitHub или Yahoo, для интерактивного тестирования, эмулятор аутентификации предоставляет локальную версию соответствующей страницы входа, чтобы помочь вам протестировать аутентификация из веб-приложений, вызывающих метод signinWithPopup или signInWithRedirect . Эта локальная страница входа также отображается в мобильных приложениях, отображаемых библиотекой веб-просмотра вашей платформы.

Эмулятор создает фиктивные учетные записи и учетные данные сторонних пользователей по мере необходимости в ходе выполнения потоков.

Тестирование потоков IDP с получением учетных данных вручную

Если вы используете «ручной» метод входа и вызываете метод signInWithCredentials вашей платформы, то, как обычно, ваше приложение будет запрашивать реальный сторонний вход и получать настоящие сторонние учетные данные.

Обратите внимание, что эмулятор поддерживает проверку подлинности signInWithCredential только для учетных данных, полученных от Google Sign-In, Apple и других поставщиков, которые используют токены идентификаторов, реализованные в виде веб-токенов JSON (JWT). Маркеры доступа (например, предоставленные Facebook или Twitter, которые не являются JWT) не поддерживаются. В следующем разделе обсуждается альтернатива в этих случаях.

Неинтерактивное тестирование

Одним из подходов к неинтерактивному тестированию является автоматизация кликов пользователей на странице входа, обслуживаемой эмулятором. Для веб-приложений используйте интерфейс управления, например WebDriver. Для мобильных устройств используйте инструменты тестирования пользовательского интерфейса на вашей платформе, такие как Espresso или Xcode.

Кроме того, вы можете обновить свой код, чтобы использовать signInWithCredential (например, в ветке кода) и использовать поток проверки подлинности токена с токенами фиктивного идентификатора для учетных записей вместо реальных учетных данных.

  1. Перемонтируйте или закомментируйте часть вашего кода, которая извлекает idTokens из IDP; это устраняет необходимость вводить настоящие имена пользователей и пароли во время ваших тестов, а также освобождает ваши тесты от квот API и ограничений скорости в IDP.
  2. Во-вторых, используйте буквальную строку JSON вместо токена для signInWithCredential . Используя веб-SDK в качестве примера, вы можете изменить код на:
firebase.auth().signInWithCredential(firebase.auth.GoogleAuthProvider.credential(
  '{"sub": "abc123", "email": "foo@example.com", "email_verified": true}'
));

При использовании с эмулятором этот код успешно аутентифицирует пользователя с электронной почтой foo@example.com в Google. Думайте о подполе как о первичном ключе, который можно изменить на любую строку, имитируя подпись разных пользователей. Вы можете заменить firebase.auth.GoogleAuthProvider , например, new firebase.auth.OAuthProvider('yahoo.com') или любым другим идентификатором провайдера, который вы хотите имитировать.

Чем эмулятор аутентификации отличается от продакшена

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

Облачный IAM

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

Поскольку на мобильных платформах вход по ссылке электронной почты зависит от динамических ссылок Firebase, все такие ссылки вместо этого будут открываться на (мобильной) веб-платформе.

Сторонний вход

Для сторонних потоков входа Firebase Authentication использует безопасные учетные данные от сторонних поставщиков, таких как Twitter и Github.

Реальные учетные данные от поставщиков OpenID Connect, таких как Google и Apple, принимаются эмулятором аутентификации. Учетные данные от поставщиков, не входящих в OpenID Connect, не поддерживаются.

Вход по электронной почте / SMS

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

Эмулятор не поддерживает возможность определения тестовых номеров телефонов с фиксированными кодами входа, как это можно сделать с помощью консоли Firebase.

Ограничение скорости / защита от злоупотреблений

Эмулятор проверки подлинности не воспроизводит функции ограничения производительности или защиты от злоупотреблений.

Что дальше?

  • Подборку видеороликов и подробных практических примеров смотрите в учебном плейлисте Firebase Emulators .

  • Поскольку триггерные функции представляют собой типичную интеграцию с аутентификацией, узнайте больше об эмуляторе Cloud Functions for Firebase в разделе Запуск функций локально .