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

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

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

Что я могу сделать с помощью эмулятора Authentication ?

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

  • Создавайте, обновляйте и управляйте эмулируемыми учетными записями пользователей для тестирования электронной почты/пароля, номера телефона/SMS, многофакторной 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

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

Kotlin+KTX
Firebase.auth.useEmulator("10.0.2.2", 9099)
Java
FirebaseAuth.getInstance().useEmulator("10.0.2.2", 9099);
Быстрый
Auth.auth().useEmulator(withHost:"127.0.0.1", port: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 CLI . Вы можете передать идентификатор проекта непосредственно в initializeApp или установить переменную среды GCLOUD_PROJECT .

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

ID-токены

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

Запустите эмулятор

Вы можете использовать эмулятор Authentication в интерактивном режиме через Emulator Suite UI и в неинтерактивном режиме через локальный интерфейс REST. В следующих разделах рассматриваются интерактивные и неинтерактивные варианты использования.

Чтобы запустить эмулятор Authentication , его интерфейс REST и Emulator Suite UI , выполните:

firebase emulators:start

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

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

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

После создания тестового пользователя ваше приложение может выполнять вход и выход пользователя с помощью логики 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 или клиентского кода для управления учетными записями пользователей электронной почты и паролей вы можете написать сценарии настройки тестов, которые вызывают API-интерфейсы REST для создания и удаления учетных записей пользователей и получения внеполосных кодов проверки электронной почты для заполнения проверки электронной почты эмулятора. URL-адрес. Это позволяет разделить платформу и тестовый код и позволяет проводить тестирование в неинтерактивном режиме.

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

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

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

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

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

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

Использование Emulator Suite UI :

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

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

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

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

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

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

Многофакторные СМС

Эмулятор Authentication поддерживает создание прототипов и тестирование потоков многофакторной аутентификации SMS (MFA), доступных в рабочей версии для iOS , Android и Интернета .

Когда вы добавляете фиктивного пользователя в эмулятор, вы можете включить MFA и настроить один или несколько телефонных номеров, на которые будут отправляться SMS-сообщения второго фактора. Сообщения выводятся на тот же терминал, на котором вы запускали firebase emulators:start , и доступны из интерфейса REST.

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

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

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

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

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

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

Если ваше приложение использует какой-либо сквозной поток Firebase SDK, например OAuthProvider для входа в Microsoft, GitHub или Yahoo, для интерактивного тестирования, эмулятор Authentication предоставляет локальную версию соответствующей страницы входа, чтобы помочь вам протестировать. аутентификация из веб-приложений, которые вызывают метод 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') или любой другой идентификатор провайдера, который вы хотите имитировать.

Эмулируемая аутентификация по пользовательскому токену

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

Чем эмулятор Authentication отличается от производственного

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

Облачный IAM

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

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

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

Для сторонних потоков входа в систему 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 , но при этом вы столкнетесь с ошибкой в ​​рабочей среде.

Что дальше?

,

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

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

Что я могу сделать с помощью эмулятора Authentication ?

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

  • Создавайте, обновляйте и управляйте эмулируемыми учетными записями пользователей для тестирования электронной почты/пароля, номера телефона/SMS, многофакторной 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

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

Kotlin+KTX
Firebase.auth.useEmulator("10.0.2.2", 9099)
Java
FirebaseAuth.getInstance().useEmulator("10.0.2.2", 9099);
Быстрый
Auth.auth().useEmulator(withHost:"127.0.0.1", port: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 CLI . Вы можете передать идентификатор проекта непосредственно в initializeApp или установить переменную среды GCLOUD_PROJECT .

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

ID-токены

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

Запустите эмулятор

Вы можете использовать эмулятор Authentication в интерактивном режиме через Emulator Suite UI и в неинтерактивном режиме через локальный интерфейс REST. В следующих разделах рассматриваются интерактивные и неинтерактивные варианты использования.

Чтобы запустить эмулятор Authentication , его интерфейс REST и Emulator Suite UI , выполните:

firebase emulators:start

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

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

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

После создания тестового пользователя ваше приложение может выполнять вход и выход пользователя с помощью логики 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 или клиентского кода для управления учетными записями пользователей электронной почты и паролей вы можете написать сценарии настройки тестирования, которые вызывают API-интерфейсы REST для создания и удаления учетных записей пользователей и получения внеполосных кодов проверки электронной почты для заполнения проверки электронной почты эмулятора. URL-адрес. Это позволяет разделить платформу и тестовый код и позволяет проводить тестирование в неинтерактивном режиме.

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

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

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

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

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

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

Использование Emulator Suite UI :

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

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

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

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

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

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

Многофакторные СМС

Эмулятор Authentication поддерживает создание прототипов и тестирование потоков многофакторной аутентификации SMS (MFA), доступных в рабочей версии для iOS , Android и Интернета .

Когда вы добавляете фиктивного пользователя в эмулятор, вы можете включить MFA и настроить один или несколько телефонных номеров, на которые будут отправляться SMS-сообщения второго фактора. Сообщения выводятся на тот же терминал, на котором вы запускали firebase emulators:start , и доступны из интерфейса REST.

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

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

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

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

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

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

Если ваше приложение использует какой-либо сквозной поток Firebase SDK, например OAuthProvider для входа в Microsoft, GitHub или Yahoo, для интерактивного тестирования, эмулятор Authentication предоставляет локальную версию соответствующей страницы входа, чтобы помочь вам протестировать. аутентификация из веб-приложений, которые вызывают метод 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') или любым другим идентификатором провайдера, который вы хотите имитировать.

Эмулируемая аутентификация по пользовательскому токену

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

Чем эмулятор Authentication отличается от производственного

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

Облачный IAM

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

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

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

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

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

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

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

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

Аутентификация по индивидуальному токену

Эмулятор Authentication не проверяет подпись или срок действия пользовательских токенов. Это позволяет вам использовать токены, созданные вручную, и повторно использовать токены в течение неопределенного времени в сценариях прототипирования и тестирования.

Ограничение скорости / борьба со злоупотреблениями

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

Функции блокировки

В рабочей среде пользователи записываются в хранилище один раз после срабатывания событий beforeCreate и beforeSignIn . Однако из-за технических ограничений эмулятор Authentication записывает данные в хранилище дважды: один раз после создания пользователя, а другой — после входа в систему. Это означает, что для новых пользователей вы можете успешно вызвать getAuth().getUser() в beforeSignIn в эмуляторе Authentication , но при этом вы столкнетесь с ошибкой в ​​рабочей среде.

Что дальше?

,

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

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

Что я могу сделать с помощью эмулятора Authentication ?

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

  • Создавайте, обновляйте и управляйте эмулируемыми учетными записями пользователей для тестирования электронной почты/пароля, номера телефона/SMS, многофакторной 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

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

Kotlin+KTX
Firebase.auth.useEmulator("10.0.2.2", 9099)
Java
FirebaseAuth.getInstance().useEmulator("10.0.2.2", 9099);
Быстрый
Auth.auth().useEmulator(withHost:"127.0.0.1", port: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 CLI . Вы можете передать идентификатор проекта непосредственно в initializeApp или установить переменную среды GCLOUD_PROJECT .

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

ID-токены

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

Запустите эмулятор

Вы можете использовать эмулятор Authentication в интерактивном режиме через Emulator Suite UI и в неинтерактивном режиме через локальный интерфейс REST. В следующих разделах рассматриваются интерактивные и неинтерактивные варианты использования.

Чтобы запустить эмулятор Authentication , его интерфейс REST и Emulator Suite UI , выполните:

firebase emulators:start

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

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

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

После создания тестового пользователя ваше приложение может выполнять вход и выход пользователя с помощью логики 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 или клиентского кода для управления учетными записями пользователей электронной почты и паролей вы можете написать сценарии настройки тестов, которые вызывают API-интерфейсы REST для создания и удаления учетных записей пользователей и получения внеполосных кодов проверки электронной почты для заполнения проверки электронной почты эмулятора. URL-адрес. Это позволяет разделить платформу и тестовый код и позволяет проводить тестирование в неинтерактивном режиме.

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

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

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

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

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

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

Используя Emulator Suite UI :

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

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

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

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

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

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

Многофакторные SMS

Эмулятор Authentication поддерживает прототипирование и тестирование потоков многофакторной аутентификации SMS (MFA), доступных в производстве для iOS , Android и Web .

Когда вы добавляете фиктивного пользователя в эмулятор, вы можете включить MFA и настроить одно или несколько телефонов, на которые будут отправлены SMS -сообщения второго фактора. Сообщения выводятся в тот же терминал, на котором вы запускали firebase emulators:start и доступны из интерфейса REST.

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

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

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

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

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

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

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

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

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

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

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

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

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

В качестве альтернативы, вы можете обновить свой код для использования signInWithCredential (например, в филиале кода) и использовать поток аутентификации токена с токенами Mock 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') или любым другим идентификатором поставщика, который вы хотите издеваться.

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

Эмулятор Authentication обрабатывает аутентификацию с помощью пользовательских веб -токенов JSON с использованием вызовов для метода signInWithCustomToken на поддерживаемых платформах, как описано в документации Authentication производства .

Как эмулятор Authentication отличается от производства

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

Облачный IAM

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

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

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

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

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

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

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

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

Пользовательская аутентификация токена

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

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

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

Блокирующие функции

В производстве пользователи записываются в хранилище один раз после того, как запускаются события beforeCreate и beforeSignIn . Однако из-за технических ограничений эмулятор Authentication записывает дважды, один раз после создания пользователя и другой после входа. Это означает, что для новых пользователей вы можете успешно позвонить в getAuth().getUser() в beforeSignIn в эмуляторе Authentication , но вы столкнетесь с ошибкой, делающей это в производстве.

Что дальше?

,

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

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

Что я могу сделать с эмулятором Authentication ?

Эмулятор Authentication обеспечивает высококачественную локальную эмуляцию услуг 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 и Web SDK

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

Kotlin+KTX
Firebase.auth.useEmulator("10.0.2.2", 9099)
Java
FirebaseAuth.getInstance().useEmulator("10.0.2.2", 9099);
Быстрый
Auth.auth().useEmulator(withHost:"127.0.0.1", port: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 -код подключился к общему эмулятору, работающему в другой среде, вам нужно будет указать тот же идентификатор проекта, который вы установили, используя CLI Firebase . Вы можете передать идентификатор проекта непосредственно в initializeApp или установить переменную среды GCLOUD_PROJECT .

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

Токены ID

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

Запустите эмулятор

Вы можете использовать эмулятор Authentication интерактивно через Emulator Suite UI и неинтрактивно через его локальный интерфейс REST. Следующие разделы охватывают интерактивные и неинтерактивные варианты использования.

Чтобы запустить эмулятор Authentication , его интерфейс REST и Emulator Suite UI , выполнить:

firebase emulators:start

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

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

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

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

Для тестирования проверки электронной почты/входа с потоками электронной почты эмулятор печатает 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 или клиентского кода для управления учетными записями пользователей электронной почты/пароля вы можете написать сценарии настройки тестов, которые вызывают API REST для создания и удаления учетных записей пользователей и извлекать внеполосные коды электронных писем, чтобы заполнить проверку электронной почты эмулятора. URL-адрес. Это удерживает платформу и тестовый код отдельно и позволяет протестировать неинтрактивно.

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

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

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

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

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

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

Используя Emulator Suite UI :

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

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

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

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

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

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

Многофакторные SMS

Эмулятор Authentication поддерживает прототипирование и тестирование потоков многофакторной аутентификации SMS (MFA), доступных в производстве для iOS , Android и Web .

Когда вы добавляете фиктивного пользователя в эмулятор, вы можете включить MFA и настроить одно или несколько телефонов, на которые будут отправлены SMS -сообщения второго фактора. Сообщения выводятся в тот же терминал, на котором вы запускали firebase emulators:start и доступны из интерфейса REST.

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

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

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

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

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

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

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

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

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

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

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

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

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

В качестве альтернативы, вы можете обновить свой код для использования signInWithCredential (например, в филиале кода) и использовать поток аутентификации токена с токенами Mock 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') или любым другим идентификатором поставщика, который вы хотите издеваться.

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

Эмулятор Authentication обрабатывает аутентификацию с помощью пользовательских веб -токенов JSON с использованием вызовов для метода signInWithCustomToken на поддерживаемых платформах, как описано в документации Authentication производства .

Как эмулятор Authentication отличается от производства

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

Облачный IAM

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

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

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

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

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

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

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

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

Пользовательская аутентификация токена

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

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

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

Блокирующие функции

В производстве пользователи записываются в хранилище один раз после того, как запускаются события beforeCreate и beforeSignIn . Однако из-за технических ограничений эмулятор Authentication записывает дважды, один раз после создания пользователя и другой после входа. Это означает, что для новых пользователей вы можете успешно позвонить в getAuth().getUser() в beforeSignIn в эмуляторе Authentication , но вы столкнетесь с ошибкой, делающей это в производстве.

Что дальше?