Прежде чем использовать эмулятор Authentication в своем приложении, убедитесь, что вы понимаете общий рабочий процесс Firebase Local Emulator Suite, установили и настроили Local Emulator Suite и изучили команды CLI.
Предполагается, что вы уже умеете разрабатывать решения Firebase Authentication для рабочей среды. При необходимости ознакомьтесь с документацией по сочетанию платформы и метода аутентификации.
Что можно делать с помощью эмулятора Authentication?
Эмулятор Authentication обеспечивает высокую точность локальной эмуляции сервисов Firebase Authentication, предоставляя большую часть функциональных возможностей, доступных в рабочей версии Firebase Authentication. В сочетании с Firebase SDK для платформ Apple, Android и веб-приложений эмулятор позволяет:
- Создание, обновление и управление эмулированными аккаунтами пользователей для тестирования аутентификации с помощью адреса электронной почты и пароля, номера телефона и SMS, многофакторной аутентификации с помощью SMS и аутентификации с помощью стороннего поставщика идентификационной информации (например, Google).
- Просмотр и изменение эмулированных пользователей
- Прототипы систем аутентификации с помощью специальных токенов.
- Проверьте сообщения, связанные с аутентификацией, на вкладке «Журналы» пользовательского интерфейса эмулятора.
Выберите проект Firebase
Firebase Local Emulator Suite эмулирует продукты для одного проекта Firebase.
Чтобы выбрать проект, перед запуском эмуляторов выполните в CLI команду firebase use в рабочем каталоге. или передавать флаг --project каждой команде эмулятора.
Local Emulator Suite поддерживает эмуляцию реальных и демонстрационных проектов Firebase.
| Тип проекта | Функции | Использование с эмуляторами |
|---|---|---|
| Реал |
Реальный проект Firebase – это проект, который вы создали и настроили (скорее всего, в консоли Firebase). В реальных проектах есть активные ресурсы, такие как экземпляры баз данных, сегменты хранилища, функции и другие ресурсы, настроенные для этого проекта Firebase. |
При работе с реальными проектами Firebase вы можете запускать эмуляторы для любого или всех поддерживаемых продуктов. Для всех продуктов, которые вы не эмулируете, ваши приложения и код будут взаимодействовать с активным ресурсом (экземпляром базы данных, сегментом хранилища, функцией и т. д.). |
| Демонстрация |
В демонстрационном проекте Firebase нет реальной конфигурации Firebase и активных ресурсов. Обычно доступ к таким проектам осуществляется через практические работы или другие учебные материалы. Идентификаторы демопроектов имеют префикс |
При работе с демонстрационными проектами Firebase ваши приложения и код взаимодействуют только с эмуляторами. Если приложение попытается взаимодействовать с ресурсом, для которого эмулятор не запущен, код не сработает. |
Рекомендуем по возможности использовать демонстрационные проекты. Преимущества подписки на Google One включают:
- Простая настройка, поскольку вы можете запускать эмуляторы, не создавая проект Firebase.
- Повышенная безопасность. Если ваш код случайно вызовет неэмулированные (рабочие) ресурсы, данные не будут изменены, а плата за использование не будет взиматься.
- Улучшенная поддержка офлайн-режима, поскольку для скачивания конфигурации SDK не требуется доступ к интернету.
Настройте приложение для взаимодействия с эмулятором
SDK для Android, iOS и веб-приложений
Чтобы настроить конфигурацию в приложении или тестовые классы для взаимодействия с эмулятором Authentication, выполните следующие действия:
Kotlin
Firebase.auth.useEmulator("10.0.2.2", 9099)
Java
FirebaseAuth.getInstance().useEmulator("10.0.2.2", 9099);
Swift
Auth.auth().useEmulator(withHost:"127.0.0.1", port:9099)
Unity
FirebaseAuth auth = FirebaseAuth.DefaultInstance; // Connects to the Auth Emulator running on port 9099 auth.UseEmulator("127.0.0.1", 9099);
Web
import { getAuth, connectAuthEmulator } from "firebase/auth"; const auth = getAuth(); connectAuthEmulator(auth, "http://127.0.0.1:9099");
Web
const auth = firebase.auth(); auth.useEmulator("http://127.0.0.1:9099");
Для создания прототипов и тестирования взаимодействия между Authentication и Cloud Functions или Firebase Security Rules для Cloud Firestore или Realtime Database не требуется дополнительная настройка. Если эмулятор Authentication настроен и запущены другие эмуляторы, они автоматически работают вместе.
Admin SDK сек.
Firebase Admin SDK автоматически подключаются к эмулятору Authentication, когда задана переменная среды FIREBASE_AUTH_EMULATOR_HOST.
export FIREBASE_AUTH_EMULATOR_HOST="127.0.0.1:9099"
Обратите внимание, что эмулятор Cloud Functions автоматически распознает эмулятор Authentication, поэтому вы можете пропустить этот шаг при тестировании интеграции между эмуляторами Cloud Functions и Authentication. Переменная среды будет автоматически задана для Admin SDK в Cloud Functions.
Если переменная среды задана, Firebase Admin SDK будет принимать неподписанные токены идентификации и файлы cookie сеанса, созданные эмулятором Authentication (с помощью методов verifyIdToken и createSessionCookie соответственно), чтобы упростить локальную разработку и тестирование. Убедитесь, что переменная среды не задана в рабочей среде.
Если вы хотите, чтобы код Admin SDK подключался к общему эмулятору, работающему в другой среде, вам нужно будет указать тот же идентификатор проекта, который вы задали с помощью интерфейса командной строки Firebase. Вы можете передать идентификатор проекта в initializeApp напрямую или задать переменную среды GCLOUD_PROJECT.
Node.js Admin SDK
admin.initializeApp({ projectId: "your-project-id" });
Переменная среды
export GCLOUD_PROJECT="your-project-id"
Токены идентификации
По соображениям безопасности эмулятор Authentication выдает неподписанные токены идентификации, которые принимаются только другими эмуляторами Firebase или Firebase Admin SDK, если он настроен. Эти токены будут отклонены рабочими сервисами Firebase или Firebase Admin SDK, работающим в производственном режиме (например, в режиме работы по умолчанию без описанных выше шагов настройки).
Запустите эмулятор
Эмулятор Authentication можно использовать в интерактивном режиме через Emulator Suite UI и в неинтерактивном режиме через локальный REST API. В следующих разделах рассматриваются интерактивные и неинтерактивные варианты использования.
Чтобы запустить эмулятор Authentication, его REST-интерфейс и Emulator Suite UI, выполните следующую команду:
firebase emulators:start
Эмулированная аутентификация по электронной почте, ссылке в электронном письме и анонимная аутентификация
Для анонимной аутентификации приложение может использовать логику входа для вашей платформы (iOS, Android, веб).
Для аутентификации по адресу электронной почты и паролю вы можете начать прототипирование, добавив аккаунты пользователей в эмулятор Authentication из своего приложения с помощью методов SDK Authentication или используя Emulator Suite UI.
- В Emulator Suite UI нажмите на вкладку Authentication (Аутентификация).
- Нажмите кнопку Добавить пользователя.
- Следуйте инструкциям мастера создания аккаунта пользователя, заполняя поля аутентификации электронной почты.
После создания тестового пользователя ваше приложение может выполнять вход и выход пользователя с помощью логики SDK для вашей платформы (iOS, Android, веб).
Для тестирования подтверждения адреса электронной почты и входа по ссылке в письме эмулятор выводит URL в терминал, в котором был выполнен запуск firebase emulators:start.
i To verify the email address customer@ex.com, follow this link:
http://127.0.0.1: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://127.0.0.1:9099/emulator/action?mode=resetPassword&oobCode=XYZ!23&apiKey=fake-api-key&newPassword=YOUR_NEW_PASSWORDНеинтерактивное тестирование
Вместо того чтобы использовать Emulator Suite UI или клиентский код для управления аккаунтами пользователей с адресом электронной почты и паролем, вы можете написать скрипты настройки тестов, которые вызывают REST API для создания и удаления аккаунтов пользователей и получения кодов подтверждения адреса электронной почты, чтобы заполнить URL подтверждения адреса электронной почты в эмуляторе. Это позволяет отделить код платформы от кода теста и проводить тестирование в неинтерактивном режиме.
Для неинтерактивных тестовых потоков с адресом электронной почты и паролем типичная последовательность выглядит следующим образом.
- Создайте пользователей с помощью Authentication конечной точки REST signUp.
- Для тестирования выполните вход, используя адреса электронной почты и пароли.
- Если это применимо к вашим тестам, получите доступные коды подтверждения адреса электронной почты вне диапазона из конечной точки REST, специфичной для эмулятора.
- Удалите записи пользователей с помощью конечной точки REST для эмулятора.
Эмулированная аутентификация по телефону или SMS
Для аутентификации по телефону эмулятор Auth не поддерживает:
- reCAPTCHA и APN. После настройки взаимодействия с эмулятором клиентские SDK отключают эти способы подтверждения так же, как описано для интеграционного тестирования (iOS, Android, веб).
- Тестовые номера телефонов с кодами, предварительно настроенными в консоли Firebase.
В остальном процесс аутентификации по телефону или SMS не отличается от описанного для рабочей среды (iOS, Android, веб-версия).
Использование Emulator Suite UI:
- В Emulator Suite UI нажмите на вкладку Authentication (Аутентификация).
- Нажмите кнопку Добавить пользователя.
- Следуйте инструкциям мастера создания аккаунта пользователя, заполняя поля аутентификации по телефону.
Однако для аутентификации по телефону эмулятор НЕ будет инициировать доставку каких-либо текстовых сообщений, поскольку связь с оператором выходит за рамки области действия и не подходит для локального тестирования. Вместо этого эмулятор выводит код, который был бы отправлен в SMS, в том же терминале, в котором вы запустили firebase emulators:start. Введите этот код в приложении, чтобы сымитировать проверку текстовых сообщений пользователями.
Неинтерактивное тестирование
Для неинтерактивного тестирования аутентификации по номеру телефона используйте REST API эмулятора Authentication, чтобы получить доступные SMS-коды. Обратите внимание, что код меняется при каждом запуске процесса.
Обычно это происходит следующим образом:
- Чтобы начать проверку, позвоните на платформу
signInWithPhoneNumber. - Получите код подтверждения, используя конечную точку REST, предназначенную для эмулятора.
- Позвонить на номер
confirmationResult.confirm(code)и сообщить код подтверждения.
Многофакторная аутентификация по SMS
Эмулятор Authentication поддерживает прототипирование и тестирование процессов многофакторной аутентификации (MFA) по SMS, доступных в рабочей среде для iOS, Android и веб-приложений.
При добавлении фиктивного пользователя в эмулятор вы можете включить МФА и настроить один или несколько номеров телефонов, на которые будут отправляться SMS-сообщения со вторым фактором. Сообщения выводятся в том же терминале, в котором вы запустили firebase emulators:start, и доступны в интерфейсе REST.
Эмуляция аутентификации стороннего поставщика идентификационной информации
Эмулятор Authentication позволяет тестировать многие сторонние процессы аутентификации в приложениях для iOS, Android и веб-приложениях без изменения рабочего кода. Примеры процессов аутентификации можно найти в документации по различным комбинациям поставщиков и платформ, которые можно использовать в приложении.
Как правило, Firebase SDK позволяет выполнить аутентификацию одним из двух способов:
- Приложение позволяет SDK управлять всем процессом от начала до конца, включая взаимодействие со сторонними поставщиками идентификационной информации для получения учетных данных.
- Приложение вручную получает учетные данные от стороннего поставщика с помощью его SDK и передает их в SDK Authentication.
Ещё раз ознакомьтесь с документацией по ссылке выше и убедитесь, что вы понимаете, как работает выбранный вами способ получения учетных данных (с помощью Firebase SDK или вручную). Эмулятор Authentication поддерживает тестирование обоих подходов.
Тестирование процессов поставщика идентификационной информации на основе Firebase SDK
Если в вашем приложении используется сквозной поток Firebase SDK, например OAuthProvider для входа через Microsoft, GitHub или Yahoo, то для интерактивного тестирования эмулятор Authentication предоставляет локальную версию соответствующей страницы входа. Это позволяет тестировать аутентификацию из веб-приложений, которые вызывают метод signinWithPopup или signInWithRedirect. Эта локальная страница входа также появляется в мобильных приложениях, отображаемых библиотекой WebView вашей платформы.
Эмулятор создает фиктивные сторонние аккаунты пользователей и учетные данные по мере необходимости в ходе выполнения потоков.
Тестирование потоков поставщика идентификационной информации с получением учетных данных вручную
Если вы используете вход вручную и вызываете метод signInWithCredentials, то приложение, как обычно, запросит вход через сторонний сервис и получит настоящие учетные данные.
Обратите внимание, что эмулятор поддерживает только аутентификацию signInWithCredential для учетных данных, полученных от входа с аккаунтом Google, Apple и других поставщиков, которые используют токены идентификации, реализованные как веб-токены JSON (JWT). Токены доступа (например, предоставляемые Facebook или Twitter, которые не являются JWT) не поддерживаются. В следующем разделе обсуждается альтернатива в этих случаях.
Неинтерактивное тестирование
Один из подходов к неинтерактивному тестированию – автоматизировать клики пользователей на странице входа, обслуживаемой эмулятором. Для веб-приложений используйте интерфейс управления, например WebDriver. Для мобильных устройств используйте инструменты тестирования интерфейса, доступные на вашей платформе, например Espresso или Xcode.
Вы также можете обновить код, чтобы использовать signInWithCredential (например, в ветке кода), и использовать процесс аутентификации токенов с фиктивными токенами идентификаторов для аккаунтов вместо реальных учетных данных.
- Перепишите или закомментируйте часть кода, которая получает idTokens от поставщика идентификационной информации. Это избавит вас от необходимости вводить настоящие имена пользователей и пароли во время тестов, а также от квот API и ограничений частоты запросов у поставщика идентификационной информации.
- Затем используйте строку JSON вместо токена для
signInWithCredential. Например, в веб-SDK можно изменить код следующим образом:
firebase.auth().signInWithCredential(firebase.auth.GoogleAuthProvider.credential(
'{"sub": "abc123", "email": "foo@example.com", "email_verified": true}'
));
При использовании с эмулятором этот код успешно аутентифицирует пользователя с адресом электронной почты foo@example.com в Google. Поле sub можно рассматривать как первичный ключ, который можно изменить на любую строку, имитируя вход разных пользователей. Вы можете заменить firebase.auth.GoogleAuthProvider, например, на new firebase.auth.OAuthProvider('yahoo.com') или любой другой идентификатор поставщика, который хотите имитировать.
Эмулированная аутентификация с помощью специального токена
Эмулятор Authentication обрабатывает аутентификацию с помощью пользовательских веб-токенов JSON, используя вызовы метода signInWithCustomToken на поддерживаемых платформах, как описано в документации по рабочей среде Authentication.
Чем эмулятор Authentication отличается от рабочей среды
Эмулятор Firebase Authentication имитирует многие функции рабочего продукта. Однако, поскольку любая система аутентификации в значительной степени зависит от безопасности на нескольких уровнях (устройство, сторонние поставщики, Firebase и т. д.), эмулятору сложно правильно воссоздать все потоки.
Cloud IAM
Firebase Emulator Suite не пытается воспроизводить или учитывать какое-либо поведение, связанное с IAM, при запуске. Эмуляторы соблюдают правила безопасности Firebase, но в ситуациях, когда обычно используется IAM, например для настройки сервисного аккаунта, вызывающего Cloud Functions, и, следовательно, разрешений, эмулятор не настраивается и будет использовать глобально доступный аккаунт на вашем компьютере для разработки, аналогично непосредственному запуску локального скрипта.
Вход по ссылке из электронного письма на мобильном устройстве
Поскольку на мобильных платформах вход по ссылке в электронном письме зависит от Firebase Dynamic Links, все такие ссылки будут открываться на мобильной веб-платформе.
Вход через сторонние сервисы
Для входа через сторонние сервисы Firebase Authentication использует защищенные учетные данные сторонних поставщиков, таких как Twitter и GitHub.
Эмулятор Authentication принимает настоящие учетные данные от поставщиков OpenID Connect, таких как Google и Apple. Учетные данные от поставщиков, не поддерживающих OpenID Connect, не поддерживаются.
Вход по электронной почте или SMS
В рабочих приложениях вход по электронной почте и SMS включает асинхронную операцию, при которой пользователь проверяет полученное сообщение и вводит код входа в интерфейсе входа. Эмулятор Authentication не отправляет электронные письма и SMS, но, как описано выше, генерирует коды входа и выводит их в терминал для использования при тестировании.
Эмулятор не поддерживает возможность определения тестовых номеров телефонов с фиксированными кодами входа, как это можно сделать с помощью консоли Firebase.
Аутентификация с помощью специального токена
Эмулятор Authentication не проверяет подпись или срок действия пользовательских токенов. Это позволяет использовать токены, созданные вручную, и повторно использовать токены неограниченное количество раз в сценариях прототипирования и тестирования.
Ограничение частоты запросов и защита от злоупотреблений
Эмулятор Authentication не воспроизводит ограничения частоты запросов и функции защиты от злоупотреблений, которые действуют в рабочей среде.
Функции блокировки
В рабочей среде пользователи записываются в хранилище один раз после активации событий beforeCreate и beforeSignIn. Однако из-за технических ограничений эмулятор Authentication записывает данные в хранилище дважды: после создания пользователя и после входа. Это означает, что для новых пользователей вы можете успешно вызвать getAuth().getUser() в beforeSignIn в эмуляторе Authentication, но в рабочей среде произойдет ошибка.
Что дальше?
Чтобы посмотреть подборку видео и подробные инструкции, перейдите к плейлисту с обучающими видео по эмуляторам Firebase.
Поскольку триггерные функции – это типичная интеграция с Authentication, узнайте больше об эмуляторе Cloud Functions for Firebase в статье Локальный запуск функций.