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

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

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

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

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

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

Пакет локального эмулятора Firebase эмулирует продукты для одного проекта Firebase.

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

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

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

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

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

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

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

Демо

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

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

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

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

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

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

Android, iOS и веб-SDK

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

Android
FirebaseAuth.getInstance().useEmulator('10.0.2.2', 9099);
iOS - Swift
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 Администратор SDK автоматически подключается к эмулятору аутентификации , когда FIREBASE_AUTH_EMULATOR_HOST переменной среды.

export FIREBASE_AUTH_EMULATOR_HOST="localhost:9099"

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

С набором переменных среды, Firebase Администратор SDKs будет принимать неподписанные ID лексем и сессионные куки , выданные эмуляторе аутентификации (через verifyIdToken и createSessionCookie методов соответственно) , чтобы облегчить местное developmemt и тестирование. Пожалуйста , убедитесь , что не установить переменную среды в производстве.

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

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

ID токены

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

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

firebase emulators:start

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

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

  1. В эмуляторе Suite , UI, выберите вкладку Проверка подлинности.
  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, включая параметр Новый_пароля (который может изменяться по мере необходимости), в терминал.

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

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

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

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

  1. Создание пользователей с Аутентификация конечной SIGNUP REST .
  2. Войдите в систему, используя электронную почту и пароли для выполнения тестов.
  3. Если это применимо к вашим тестам, получать доступные коды проверки электронной почты из внеполосных из эмулятора специфичной REST endpont .
  4. Промывать записи пользователей с эмулятором специфичной REST конечной точкой для очистки данных.

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

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

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

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

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

  1. В эмуляторе Suite , UI, выберите вкладку Проверка подлинности.
  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 этой стороны и передает эти учетные данные в Authentication SDK.

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

Тестирование потоков IDP, управляемых Firebase SDK

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

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

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

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

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

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

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

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

  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') или любой другой провайдер ID вы хотите поиздеваться.

Что дальше?

  • Для куратором множества видео и подробные инструкции к примерам, следовать Firebase Эмуляторы Training Playlist .

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