Google は、黒人コミュニティのための人種的公平の促進に取り組んでいます。詳細をご覧ください。
このページは Cloud Translation API によって翻訳されました。
Switch to English

アプリを認証エミュレーターに接続します

アプリで認証エミュレーターを使用する前に、 Firebase Local Emulator Suiteワークフロー全体理解し、Local EmulatorSuiteインストールして構成していることを確認してください。

認証エミュレータで何ができますか?

認証エミュレータは、Firebase認証サービスの忠実度の高いローカルエミュレーションを提供し、本番のFirebase認証に見られる機能の多くを提供します。 iOS、Android、ウェブのFirebase SDKと組み合わせると、エミュレーターで次のことが可能になります。

  • メール/パスワード、電話番号/ SMSをテストし、サードパーティのIDプロバイダー(Googleなど)でサインインするためのエミュレートされたユーザーアカウントを作成、更新、管理します
  • エミュレートされたユーザーの表示と編集
  • [エミュレータUIログ]タブで認証関連のメッセージを確認します。

認証エミュレーターと通信するようにアプリをインストルメント化する

Android、iOS、およびWeb SDK

次のように、認証エミュレーターと対話するようにアプリ内構成またはテストクラスを設定します。

アンドロイド
FirebaseAuth.getInstance().useEmulator('10.0.2.2', 9099);
iOS-Swift
Auth.auth().useEmulator(withHost:"localhost", port:9099)

Web v8

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

Web v9

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

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

認証とクラウド機能、またはCloudFirestoreまたはRealtimeDatabaseのFirebaseセキュリティルール間の相互作用のプロトタイプを作成してテストするために、追加の設定は必要ありません。認証エミュレーターが構成され、他のエミュレーターが実行されている場合、それらは自動的に連携します。

管理SDK

FIREBASE_AUTH_EMULATOR_HOST環境変数が設定されている場合、 FIREBASE_AUTH_EMULATOR_HOSTは自動的に認証エミュレータに接続します。

export FIREBASE_AUTH_EMULATOR_HOST="localhost:9099"

Cloud Functionsエミュレーターは認証エミュレーターを自動的に認識するため、Cloud Functionsエミュレーターと認証エミュレーターの統合をテストする場合は、この手順をスキップできます。環境変数は、CloudFunctionsのAdminSDKに自動的に設定されます。

環境変数を設定すると、Firebase Admin SDKは、認証エミュレーターによって発行された署名されていないIDトークンとセッションCookieを受け入れ(それぞれverifyIdTokenメソッドとcreateSessionCookieメソッドを介して)、ローカル開発とテストを容易にします。本番環境変数を設定しないように注意してください。

認証エミュレータに接続するときは、プロジェクトIDを指定する必要があります。プロジェクトIDを渡してinitializeApp直接実行するか、 GCLOUD_PROJECT環境変数を設定GCLOUD_PROJECTます。実際のFirebaseプロジェクトIDを使用する必要はないことに注意してください。認証エミュレーターはすべてのプロジェクトIDを受け入れます。

Node.js管理SDK
admin.initializeApp({ projectId: "your-project-id" });
環境変数
export GCLOUD_PROJECT="your-project-id"

IDトークン

セキュリティ上の理由から、認証エミュレータは署名されていないIDトークンを発行します。これは、他のFirebaseエミュレータ、または設定時にFirebase AdminSDKでのみ受け入れられます。これらのトークンは、本番モードで実行されている本番FirebaseサービスまたはFirebase Admin SDKによって拒否されます(たとえば、上記のセットアップ手順を使用しないデフォルトの動作)。

認証エミュレータとエミュレータスイートUIを使用してインタラクティブなプロトタイピングを開始するには、Firebaseローカルエミュレータスイートを起動します。

firebase emulators:start

匿名認証の場合、アプリはプラットフォーム( iOSAndroidWeb )のサインインロジックを実行できます。

電子メール/パスワード認証の場合、Authentication SDKメソッドを使用してアプリからAuthenticationエミュレーターにユーザーアカウントを追加するか、Emulator Suite UIを使用して、プロトタイピングを開始できます。

  1. Emulator Suite UIで、[認証]タブをクリックします。
  2. [ユーザー追加]ボタンをクリックします。
  3. ユーザーアカウント作成ウィザードに従って、電子メール認証フィールドに入力します。

テストユーザーを作成すると、アプリはプラットフォーム( iOSAndroidWeb )のSDKロジックを使用してユーザーをサインインおよびサインアウトできます。

電子メールリンクフローを使用した電子メール検証/サインインをテストするために、エミュレーターは、 firebase emulators:startが実行された端末へのURLを出力します。

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"
  }
}

パスワードのリセットをテストするために、エミュレーターは、 newPasswordパラメーター(必要に応じて変更できます)を含む同様のURLを端末に出力します。

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

非対話型テスト

Emulator Suite UIまたはクライアントコードを使用して電子メール/パスワードのユーザーアカウントを管理する代わりに、REST APIを呼び出してユーザーアカウントを作成および削除し、帯域外の電子メール検証コードをフェッチしてエミュレーターの電子メール検証にデータを入力するテストセットアップスクリプトを作成できます。 URL。これにより、プラットフォームとテストコードが分離され、非対話的にテストできるようになります。

非対話型の電子メールとパスワードのテストフローの場合、一般的なシーケンスは次のとおりです。

  1. 認証サインアップRESTエンドポイントを使用してユーザーを作成します
  2. 電子メールとパスワードを使用してユーザーにサインインし、テストを実行します。
  3. テストに該当する場合は、エミュレーター固有のRESTエンドポントから利用可能な帯域外電子メール検証コードをフェッチします。
  4. データをクリアするために、エミュレーター固有のRESTエンドポイントでユーザーレコードをフラッシュします。

エミュレートされた電話/ SMS認証

電話認証の場合、Authエミュレーターは以下をサポートしていません。

  • reCAPTCHAとAPNのフロー。エミュレーターと対話するように構成されると、クライアントSDKは、統合テスト( iOSAndroidWeb )で説明したのと同様の方法でこれらの検証方法を無効にします。
  • Firebaseコンソールで事前設定されたコードを使用して電話番号をテストします。

それ以外の点では、クライアントコードに関して、電話/ SMS認証フローは本番環境iOSAndroidWeb )で説明されているものと同じです。

Emulator Suite UIの使用:

  1. Emulator Suite UIで、[認証]タブをクリックします。
  2. [ユーザー追加]ボタンをクリックします。
  3. ユーザーアカウント作成ウィザードに従って、電話認証フィールドに入力します。

ただし、電話認証フローの場合、通信事業者への連絡は範囲外であり、ローカルテストに適していないため、エミュレータはテキストメッセージの配信をトリガーしません。代わりに、エミュレーターは、SMS経由でfirebase emulators:startを実行したのと同じ端末に送信されたはずのコードを出力します。このコードをアプリに入力して、ユーザーがテキストメッセージをチェックするのをシミュレートします。

非対話型テスト

非対話型の電話認証テストの場合は、認証エミュレーターのREST APIを使用して、使用可能なSMSコードを取得します。フローを開始するたびにコードが異なることに注意してください。

典型的なシーケンスは次のとおりです。

  1. プラットフォームsignInWithPhoneNumberを呼び出して、検証プロセスを開始します。
  2. エミュレーター固有のRESTエンドポイントを使用して検証コードを取得します
  3. confirmationResult.confirm(code)を使用して、通常どおりconfirmationResult.confirm(code)を呼び出します。

エミュレートされたサードパーティIDプロバイダー(IDP)認証

認証エミュレーターを使用すると、iOS、Android、またはWebアプリで、製品コードを変更せずに多くのサードパーティ認証フローをテストできます。認証フローの例については、アプリで使用できるプロバイダーとプラットフォームのさまざまな組み合わせについてドキュメントを参照してください

一般的に、Firebase SDKを使用して、次の2つの方法のいずれかで認証できます。

  • アプリを使用すると、SDKは、クレデンシャルを取得するためのサードパーティIDPプロバイダーとのすべてのやり取りを含め、プロセス全体をエンドツーエンドで処理できます。
  • アプリは、サードパーティのSDKを使用してサードパーティプロバイダーから手動でクレデンシャルを取得し、それらのクレデンシャルを認証SDKに渡します。

繰り返しになりますが、上記のドキュメントリンクを確認し、使用するフロー(Firebase SDK管理と手動のクレデンシャル取得)に精通していることを確認してください。認証エミュレーターは、どちらのアプローチのテストもサポートします。

FirebaseSDK主導のIDPフローのテスト

アプリがMicrosoft、GitHub、YahooでのサインインにOAuthProviderなどのFirebase SDKエンドツーエンドフローを使用してインタラクティブなテストを行う場合、認証エミュレーターは対応するサインインページのローカルバージョンを提供してテストに役立ちますsigninWithPopupまたはsignInWithRedirectメソッドを呼び出すWebアプリからの認証。このローカルで提供されるサインインページは、プラットフォームのWebViewライブラリによってレンダリングされるモバイルアプリにも表示されます。

エミュレーターは、フローの進行に応じて、必要に応じて模擬のサードパーティユーザーアカウントと資格情報を作成します。

手動のクレデンシャル取得によるIDPフローのテスト

「手動」サインイン手法を使用し、プラットフォームのsignInWithCredentialsメソッドを呼び出すと、通常どおり、アプリは実際のサードパーティのサインインを要求し、実際のサードパーティのクレデンシャルを取得します。

エミュレーターは、Googleサインイン、Apple、およびJSON Web Token(JWT)として実装されたIDトークンを使用するその他のプロバイダーから取得した資格情報に対してのみsignInWithCredential認証をサポートすることに注意してください。アクセストークン(たとえば、JWTではないFacebookまたはTwitterによって提供されるもの)はサポートされていません。次のセクションでは、これらの場合の代替案について説明します。

非対話型テスト

非対話型テストへの1つのアプローチは、エミュレーターによって提供されるサインインページでのユーザークリックを自動化することです。 Webアプリの場合は、WebDriverなどの制御インターフェイスを使用します。モバイルの場合は、EspressoやXcodeなどのプラットフォームのUIテストツールを使用します。

または、 signInWithCredentialを使用するようにコードを更新し(コードブランチなど)、実際の資格情報の代わりにアカウントのモックIDトークンを使用したトークン認証フローを使用することもできます。

  1. IDPからidTokenを取得するコードの部分を再配線またはコメントアウトします。これにより、テスト中に実際のユーザー名とパスワードを入力する必要がなくなり、IDPでのAPIクォータとレート制限からテストが解放されます。
  2. 次に、 signInWithCredentialのトークンの代わりにリテラルJSON文字列を使用します。例としてWebSDKを使用すると、コードを次のように変更できます。
firebase.auth().signInWithCredential(firebase.auth.GoogleAuthProvider.credential(
  '{"sub": "abc123", "email": "foo@example.com", "email_verified": true}'
));

エミュレーターで使用すると、このコードはGoogleのメールfoo@example.comでユーザーを正常に認証します。サブフィールドを主キーと考えてください。主キーは任意の文字列に変更でき、さまざまなユーザーのサインインを模倣できます。 firebase.auth.GoogleAuthProviderは、たとえば、 new firebase.auth.OAuthProvider('yahoo.com')またはモックしたい他のプロバイダーIDに置き換えることができます。

次は何?