Save the date - Google I/O returns May 18-20. Register to get the most out of the digital experience: Build your schedule, reserve space, participate in Q&As, earn Google Developer profile badges, and more. Register now
Diese Seite wurde von der Cloud Translation API übersetzt.
Switch to English

Verbinden Sie Ihre App mit dem Authentifizierungsemulator

Stellen Sie vor der Verwendung des Authentifizierungsemulators mit Ihrer App sicher, dass Sie den gesamten Workflow der Firebase Local Emulator Suite verstehen und die Local Emulator Suite installieren und konfigurieren .

Was kann ich mit dem Authentifizierungsemulator tun?

Der Authentifizierungsemulator bietet eine lokale High-Fidelity-Emulation von Firebase-Authentifizierungsdiensten und bietet einen Großteil der Funktionen der Firebase-Produktionsauthentifizierung . In Verbindung mit den iOS-, Android- und Web-Firebase-SDKs können Sie mit dem Emulator:

  • Erstellen, aktualisieren und verwalten Sie emulierte Benutzerkonten zum Testen von E-Mail / Passwort, Telefonnummer / SMS und zum Anmelden bei Identitätsanbietern von Drittanbietern (z. B. Google).
  • Emulierte Benutzer anzeigen und bearbeiten
  • Überprüfen Sie authentifizierungsbezogene Nachrichten auf der Registerkarte Emulator-Benutzeroberflächenprotokolle.

Instrumentieren Sie Ihre App, um mit dem Authentifizierungsemulator zu kommunizieren

Android-, iOS- und Web-SDKs

Richten Sie Ihre In-App-Konfiguration oder Testklassen so ein, dass sie wie folgt mit dem Authentifizierungsemulator interagieren.

Android
FirebaseAuth.getInstance().useEmulator('10.0.2.2', 9099);
iOS - Schnell
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");

Es ist kein zusätzliches Setup erforderlich, um Interaktionen zwischen Authentifizierungs- und Cloud-Funktionen oder Firebase-Sicherheitsregeln für Cloud Firestore oder Echtzeitdatenbanken zu prototypisieren und zu testen. Wenn der Authentifizierungsemulator konfiguriert ist und andere Emulatoren ausgeführt werden, arbeiten sie automatisch zusammen.

Admin SDK

Das Firebase Admin SDK stellt automatisch eine Verbindung zum Authentifizierungsemulator her, wenn die Umgebungsvariable FIREBASE_AUTH_EMULATOR_HOST festgelegt ist.

export FIREBASE_AUTH_EMULATOR_HOST="localhost:9099"

Beachten Sie, dass der Cloud-Funktionsemulator den Authentifizierungsemulator automatisch erkennt, sodass Sie diesen Schritt überspringen können, wenn Sie die Integration zwischen Cloud-Funktionen und Authentifizierungsemulatoren testen. Die Umgebungsvariable wird automatisch für das Admin SDK in den Cloud-Funktionen festgelegt.

verifyIdToken die Umgebungsvariable festgelegt ist, akzeptieren Firebase Admin-SDKs nicht signierte ID-Token und Sitzungscookies, die vom Authentifizierungsemulator ausgegeben werden (über die Methoden verifyIdToken bzw. createSessionCookie ), um die lokale Entwicklung und das Testen zu erleichtern. Bitte stellen Sie sicher , nicht die Umgebungsvariable in der Produktion zu setzen.

Wenn Sie eine Verbindung zum Authentifizierungsemulator herstellen, müssen Sie eine Projekt-ID angeben. Sie können eine Projekt-ID übergeben, initializeApp GCLOUD_PROJECT direkt zu initializeApp oder die Umgebungsvariable GCLOUD_PROJECT . Beachten Sie, dass Sie Ihre echte Firebase-Projekt-ID nicht verwenden müssen. Der Authentifizierungsemulator akzeptiert alle Projekt-IDs.

Node.js Admin SDK
admin.initializeApp({ projectId: "your-project-id" };
Umgebungsvariable
export GCLOUD_PROJECT="your-project-id"

ID-Token

Aus Sicherheitsgründen gibt der Authentifizierungsemulator nicht signierte ID-Token aus, die nur von anderen Firebase-Emulatoren akzeptiert werden, oder das Firebase Admin SDK, wenn es konfiguriert ist . Diese Token werden von den Firebase-Produktionsdiensten oder dem Firebase Admin SDK abgelehnt, die im Produktionsmodus ausgeführt werden (z. B. das Standardverhalten ohne die oben beschriebenen Einrichtungsschritte).

Starten Sie die Firebase Local Emulator Suite, um mit dem interaktiven Prototyping mit dem Authentifizierungsemulator und der Benutzeroberfläche der Emulator Suite zu beginnen.

firebase emulators:start

Für die anonyme Authentifizierung kann Ihre App die Anmeldelogik für Ihre Plattform ( iOS , Android , Web ) anwenden .

Für die E-Mail- / Kennwortauthentifizierung können Sie mit dem Prototyping beginnen, indem Sie dem Authentifizierungsemulator aus Ihrer App mithilfe der Authentifizierungs-SDK-Methoden oder mithilfe der Benutzeroberfläche der Emulator Suite Benutzerkonten hinzufügen.

  1. Klicken Sie in der Benutzeroberfläche der Emulator Suite auf die Registerkarte Authentifizierung .
  2. Klicken Sie auf die Schaltfläche Benutzer hinzufügen.
  3. Folgen Sie dem Assistenten zum Erstellen eines Benutzerkontos und füllen Sie die Felder für die E-Mail-Authentifizierung aus.

Wenn ein Testbenutzer erstellt wurde, kann Ihre App den Benutzer mit SDK-Logik für Ihre Plattform ( iOS , Android , Web ) an- und abmelden .

Zum Testen der E-Mail-Überprüfung / Anmeldung mit E-Mail-Link-Flows druckt der Emulator eine URL an das Terminal, an dem firebase emulators:start ausgeführt wurden.

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

Fügen Sie den Link in Ihren Browser ein, um das Überprüfungsereignis zu simulieren, und prüfen Sie, ob die Überprüfung erfolgreich war.

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

Zum Testen des Zurücksetzens von Kennwörtern druckt der Emulator eine ähnliche URL, einschließlich eines neuen Kennwortparameters (den Sie bei Bedarf ändern können), an das Terminal.

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

Nicht interaktives Testen

Anstatt die Benutzeroberfläche der Emulator Suite oder den Clientcode zum Verwalten von E-Mail- / Kennwort-Benutzerkonten zu verwenden, können Sie Test-Setup-Skripts schreiben, die REST-APIs aufrufen, um Benutzerkonten zu erstellen und zu löschen, und Out-of-Band-E-Mail-Bestätigungscodes abrufen, um die Emulator-E-Mail-Überprüfung aufzufüllen URL. Dadurch werden Plattform- und Testcode getrennt und Sie können nicht interaktiv testen.

Für nicht interaktive E-Mail- und Kennworttestabläufe lautet die typische Reihenfolge wie folgt.

  1. Erstellen Sie Benutzer mit dem REST-Endpunkt Authentication signUp .
  2. Melden Sie Benutzer mit den E-Mails und Kennwörtern an, um Tests durchzuführen.
  3. Falls für Ihre Tests zutreffend, rufen Sie verfügbare Out-of-Band-E-Mail-Bestätigungscodes vom emulatorspezifischen REST-Endpont ab .
  4. Leeren Sie Benutzerdatensätze mit dem emulatorspezifischen REST-Endpunkt, um Daten zu löschen.

Emulierte Telefon- / SMS-Authentifizierung

Für die Telefonauthentifizierung unterstützt der Auth-Emulator nicht:

  • reCAPTCHA- und APN-Flows. Nach der Konfiguration für die Interaktion mit dem Emulator deaktivieren Client-SDKs diese Überprüfungsmethoden auf ähnliche Weise wie für Integrationstests ( iOS , Android , Web ) beschrieben.
  • Testen Sie Telefonnummern mit in der Firebase-Konsole vorkonfigurierten Codes.

Ansonsten ist der Telefon- / SMS-Authentifizierungsfluss in Bezug auf den Clientcode identisch mit dem für die Produktion beschriebenen ( iOS , Android , Web ).

Verwenden der Emulator Suite-Benutzeroberfläche:

  1. Klicken Sie in der Benutzeroberfläche der Emulator Suite auf die Registerkarte Authentifizierung .
  2. Klicken Sie auf die Schaltfläche Benutzer hinzufügen.
  3. Folgen Sie dem Assistenten zum Erstellen eines Benutzerkontos und füllen Sie die Felder für die Telefonauthentifizierung aus.

Für Telefonauthentifizierungsabläufe löst der Emulator jedoch KEINE Zustellung von Textnachrichten aus, da die Kontaktaufnahme mit einem Netzbetreiber außerhalb des Geltungsbereichs liegt und nicht für lokale Tests geeignet ist! Stattdessen druckt der Emulator den Code aus, der per SMS an dasselbe Terminal gesendet worden wäre, an dem Sie firebase emulators:start ; Geben Sie diesen Code in die App ein, um zu simulieren, wie Benutzer ihre Textnachrichten überprüfen.

Nicht interaktives Testen

Verwenden Sie für nicht interaktive Telefonauthentifizierungstests die REST-API des Authentifizierungsemulators, um verfügbare SMS-Codes abzurufen. Beachten Sie, dass der Code jedes Mal anders ist, wenn Sie den Flow starten.

Die typische Reihenfolge ist wie folgt.

  1. Rufen Sie die Plattform signInWithPhoneNumber auf, um den Überprüfungsprozess zu starten.
  2. Rufen Sie den Bestätigungscode mithilfe des emulatorspezifischen REST-Endpunkts ab .
  3. Rufen Sie confirmationResult.confirm(code) wie gewohnt mit dem Bestätigungscode auf.

Emulierte IDP-Authentifizierung (Third Party Identity Provider)

Mit dem Authentifizierungsemulator können Sie viele Authentifizierungsabläufe von Drittanbietern in Ihren iOS-, Android- oder Web-Apps testen, ohne Änderungen am Produktionscode vorzunehmen. Beispiele für Authentifizierungsabläufe finden Sie in der Dokumentation zu verschiedenen Kombinationen von Anbietern und Plattformen, die Sie in Ihrer App verwenden können .

Im Allgemeinen können Sie das Firebase SDK auf zwei Arten zur Authentifizierung verwenden:

  • Mit Ihrer App kann das SDK den gesamten Prozess durchgängig abwickeln, einschließlich aller Interaktionen mit IDP-Anbietern von Drittanbietern, um Anmeldeinformationen abzurufen.
  • Ihre App ruft mithilfe des SDK dieses Drittanbieters manuell Anmeldeinformationen von einem Drittanbieter ab und leitet diese Anmeldeinformationen an das Authentifizierungs-SDK weiter.

Überprüfen Sie erneut den obigen Dokumentationslink und stellen Sie sicher, dass Sie mit dem Fluss vertraut sind, den Sie verwenden möchten - Firebase SDK-verwaltetes oder manuelles Abrufen von Anmeldeinformationen. Der Authentifizierungsemulator unterstützt das Testen beider Ansätze.

Testen von Firebase SDK-gesteuerten IDP-Flows

Wenn Ihre App einen Firebase SDK-End-to-End-Ablauf wie OAuthProvider für die Anmeldung bei Microsoft, GitHub oder Yahoo für interaktive Tests verwendet, stellt der Authentifizierungsemulator eine lokale Version der entsprechenden OAuthProvider zur Verfügung, um Sie beim Testen zu unterstützen Authentifizierung von Web-Apps, die die Methode signinWithPopup oder signInWithRedirect . Diese lokal bereitgestellte Anmeldeseite wird auch in mobilen Apps angezeigt, die von der Webview-Bibliothek Ihrer Plattform gerendert werden.

Der Emulator erstellt nach Bedarf nachgebildete Benutzerkonten und Anmeldeinformationen von Drittanbietern, während die Flows fortgesetzt werden.

Testen von IDP-Flows mit manuellem Abrufen von Anmeldeinformationen

Wenn Sie "manuelle" signInWithCredentials verwenden und die signInWithCredentials Methode Ihrer Plattform signInWithCredentials , signInWithCredentials Ihre App wie üblich eine echte Anmeldung von Drittanbietern an und ruft echte Anmeldeinformationen von Drittanbietern ab.

Beachten Sie, dass der Emulator die signInWithCredential Authentifizierung nur für Anmeldeinformationen unterstützt, die von Google Sign-In, Apple und anderen Anbietern abgerufen wurden, die ID-Token verwenden, die als JSON Web Tokens (JWTs) implementiert sind. Zugriffstoken (z. B. solche, die von Facebook oder Twitter bereitgestellt werden und keine JWTs sind) werden nicht unterstützt. Im nächsten Abschnitt wird eine Alternative in diesen Fällen erläutert.

Nicht interaktives Testen

Ein Ansatz für nicht interaktive Tests besteht darin, Benutzerklicks auf die vom Emulator bereitgestellte Anmeldeseite zu automatisieren. Verwenden Sie für Web-Apps eine Steuerungsoberfläche wie WebDriver. Verwenden Sie für Mobilgeräte die UI-Testtools Ihrer Plattform wie Espresso oder Xcode.

Alternativ können Sie Ihren Code aktualisieren, um signInWithCredential (z. B. in einem signInWithCredential ) zu verwenden, und einen Token-Authentifizierungsfluss mit Schein-ID-Token für Konten anstelle von echten Anmeldeinformationen verwenden.

  1. Verdrahten oder kommentieren Sie den Teil Ihres Codes neu, der idTokens vom IDP abruft. Dadurch entfällt die Notwendigkeit, während Ihrer Tests echte Benutzernamen und Kennwörter einzugeben, und Ihre Tests werden von API-Quoten und Ratenbeschränkungen beim IDP befreit.
  2. Verwenden Sie signInWithCredential eine literale JSON-Zeichenfolge anstelle des Tokens für signInWithCredential . Am Beispiel des Web-SDK können Sie den Code ändern in:
firebase.auth().signInWithCredential(firebase.auth.GoogleAuthProvider.credential(
  '{"sub": "abc123", "email": "foo@example.com", "email_verified": true}'
));

Bei Verwendung mit dem Emulator authentifiziert dieser Code einen Benutzer erfolgreich mit der E-Mail- foo@example.com bei Google. Stellen Sie sich das Unterfeld als Primärschlüssel vor, der in eine beliebige Zeichenfolge geändert werden kann und sich über das Signieren bei verschiedenen Benutzern lustig macht. Sie können ersetzen firebase.auth.GoogleAuthProvider mit zum Beispiel new firebase.auth.OAuthProvider('yahoo.com') oder jeden anderen Anbieter ID Sie verspotten wollen.

Was nun?