Catch up on everthing we announced at this year's Firebase Summit. Learn more

Verbinden Sie Ihre App mit dem Authentifizierungsemulator

Vor der Verwendung des Authentication - Emulator mit Ihnen App, stellen Sie sicher , dass Sie die gesamte Firebase Local Emulator Suite Workflow verstehen , und dass Sie installieren und konfigurieren die lokale Emulator Suite und seine Bewertung CLI - Befehle .

Was kann ich mit dem Authentifizierungsemulator tun?

Das Authentication - Emulator bietet High-Fidelity lokale Emulation von Firebase Authentication Service, einen großen Teil der Funktionalität in gefundenen Bereitstellung Produktion Firebase - Authentifizierung . In Verbindung mit den Apple-Plattformen, Android- und Web Firebase SDKs ermöglicht Ihnen der Emulator:

  • Erstellen, aktualisieren und verwalten Sie emulierte Benutzerkonten zum Testen von E-Mail/Passwort, Telefonnummer/SMS und Anmeldung bei Drittanbietern (z. B. Google)
  • Emulierte Benutzer anzeigen und bearbeiten
  • Überprüfen Sie auf der Registerkarte Emulator-UI-Protokolle Authentifizierungsbezogene Nachrichten.

Wählen Sie ein Firebase-Projekt aus

Die Firebase Local Emulator Suite emuliert Produkte für ein einzelnes Firebase-Projekt.

So wählen Sie das Projekt zu verwenden, bevor Sie die Emulatoren starten, in der CLI läuft firebase use in Ihrem Arbeitsverzeichnis. Oder Sie können den Pass --project Flag zu jedem Emulator - Befehl.

Lokale Emulator Suite unterstützt Emulation von realen Projekten und Firebase Demo - Projekte.

Projekttyp Merkmale Verwendung mit Emulatoren
Real

Ein echtes Firebase-Projekt ist eines, das Sie erstellt und konfiguriert haben (höchstwahrscheinlich über die Firebase-Konsole).

Echte Projekte haben Live-Ressourcen wie Datenbankinstanzen, Speicher-Buckets, Funktionen oder jede andere Ressource, die Sie für dieses Firebase-Projekt eingerichtet haben.

Wenn Sie mit echten Firebase-Projekten arbeiten, können Sie Emulatoren für eines oder alle unterstützten Produkte ausführen.

Für alle Artikel , die Du nicht emuliert werden, Ihre Anwendungen und Code werden mit der Live - Ressource (Datenbankinstanz, Speicher Eimern, Funktion usw.) in Wechselwirkung treten.

Demo

Ein Demo - Projekt Firebase hat keine wirkliche Firebase Konfiguration und keine Live - Ressourcen. Auf diese Projekte wird normalerweise über Codelabs oder andere Tutorials zugegriffen.

Projekt - IDs für Demo - Projekte haben die demo- Präfix.

Bei der Arbeit mit Demo Firebase Projekten, Ihre Anwendungen und Code interact mit nur Emulatoren. Wenn Ihre App versucht, mit einer Ressource zu interagieren, für die kein Emulator ausgeführt wird, schlägt dieser Code fehl.

Wir empfehlen Ihnen, nach Möglichkeit Demo-Projekte zu verwenden. Zu den Vorteilen gehören:

  • Einfachere Einrichtung, da Sie die Emulatoren ausführen können, ohne jemals ein Firebase-Projekt erstellen zu müssen
  • Höhere Sicherheit, denn wenn Ihr Code versehentlich nicht emulierte (Produktions-)Ressourcen aufruft, besteht keine Möglichkeit der Datenänderung, Nutzung und Abrechnung
  • Besserer Offline-Support, da Sie zum Herunterladen Ihrer SDK-Konfiguration nicht auf das Internet zugreifen müssen.

Instrumentieren Sie Ihre App, um mit dem Authentifizierungsemulator zu kommunizieren

Android-, iOS- und Web-SDKs

Richten Sie Ihre In-App-Konfiguration oder Testklassen für die Interaktion mit dem Authentifizierungsemulator wie folgt ein.

Android
FirebaseAuth.getInstance().useEmulator('10.0.2.2', 9099);
Schnell
Auth.auth().useEmulator(withHost:"localhost", port:9099)

Webversion 9

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

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

Webversion 8

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

Zum Prototyping und Testen von Interaktionen zwischen Authentifizierung und Cloud Functions oder Firebase-Sicherheitsregeln für Cloud Firestore oder Realtime Database ist keine zusätzliche Einrichtung erforderlich. Wenn der Authentifizierungsemulator konfiguriert ist und andere Emulatoren ausgeführt werden, arbeiten sie automatisch zusammen.

Admin-SDK

Das Firebase Admin SDK automatisch eine Verbindung zu dem Authentifizierungs Emulators wenn die FIREBASE_AUTH_EMULATOR_HOST Umgebungsvariable gesetzt ist.

export FIREBASE_AUTH_EMULATOR_HOST="localhost:9099"

Beachten Sie, dass der Cloud Functions-Emulator den Authentifizierungsemulator automatisch erkennt, sodass Sie diesen Schritt beim Testen von Integrationen zwischen Cloud Functions- und Authentifizierungsemulatoren überspringen können. Die Umgebungsvariable wird automatisch für das Admin SDK in Cloud Functions festgelegt.

Mit den Umgebungsvariablen gesetzt, wird Firebase Admin SDKs unsigned ID - Token und Session - Cookies durch die Authentication Emulator ausgegeben akzeptieren (via verifyIdToken und createSessionCookie Methoden beziehungsweise) lokale developmemt und Prüfung 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 ein Projekt ID passieren initializeApp direkt oder die eingestellte GCLOUD_PROJECT Umgebungsvariable. Beachten Sie, dass Sie nicht Ihre echte Firebase-Projekt-ID verwenden müssen. der Authentifizierungsemulator akzeptiert jede Projekt-ID.

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

ID-Token

Aus Sicherheitsgründen wird die Authentifizierung Emulator Probleme unsigned ID - Token, die von anderen Emulatoren Firebase nur akzeptiert werden, oder die Firebase Admin SDK , wenn konfiguriert . Diese Token werden von Firebase-Produktionsdiensten oder Firebase Admin SDK, die im Produktionsmodus ausgeführt werden, abgelehnt (z. B. das Standardverhalten ohne die oben beschriebenen Einrichtungsschritte).

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

firebase emulators:start

Für anonyme Authentifizierung können Ihre App die Anmelde-Logik für Ihre Plattform (Ausübung iOS , Android , Web ).

Für E - Mail / Passwort - Authentifizierung können Sie Prototyping starten von Benutzerkonten auf das Authentication - Emulator von Ihrem App Authentication SDK Methoden hinzufügen oder durch die Emulator Suite UI verwenden.

  1. In der Emulator Suite UI, klicken Sie auf die Registerkarte Authentifizierung.
  2. Klicken Sie auf die Schaltfläche Benutzer hinzufügen.
  3. Folgen Sie dem Assistenten zum Erstellen von Benutzerkonten und füllen Sie die Felder für die E-Mail-Authentifizierung aus.

Mit einem Testbenutzer erstellt haben , können Sie Ihre App unterzeichnen den Benutzer in und mit SDK Logik für Ihre Plattform ( iOS , Android , Web ).

Zur Prüfung E - Mail - Verifizierung / sign-in mit E - Mail - Link fließt, druckt der Emulator eine URL an das Terminal , an der firebase emulators:start ausgeführt wurde.

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 zu überprüfen, ob die Überprüfung erfolgreich war.

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

Für das Zurücksetzen von Kennwörtern zu testen, druckt der Emulator eine ähnliche URL, darunter einen newPassword Parameter (die Sie können je nach Bedarf ändern), 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 Client-Code zu verwenden, um E-Mail-/Passwort-Benutzerkonten zu verwalten, können Sie Test-Setup-Skripte schreiben, die REST-APIs aufrufen, um Benutzerkonten zu erstellen und zu löschen und Out-of-Band-E-Mail-Bestätigungscodes abzurufen, um die E-Mail-Bestätigung des Emulators auszufüllen URL. Dadurch werden Plattform- und Testcode getrennt und Sie können nicht interaktiv testen.

Für nicht interaktive E-Mail- und Kennwort-Testabläufe ist die typische Abfolge wie folgt.

  1. Erstellen von Benutzern mit der Authentifizierung SIGNUP REST - Endpunkt .
  2. Melden Sie Benutzer mit den E-Mails und Passwörtern an, um Tests durchzuführen.
  3. Wenn für Ihre Tests, holt verfügbar Out-of-Band - E - Mail - Bestätigungscodes aus dem Emulator spezifischen REST endpont .
  4. Flush Benutzerdatensätze mit dem Emulator spezifischen REST Endpunkt für Clearingdaten.

Emulierte Telefon-/SMS-Authentifizierung

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

  • reCAPTCHA- und APN-Flows. Sobald mit dem Emulator in Wechselwirkung zu treten konfiguriert Deaktivieren Client SDKs diese Nachweisverfahren in einer Weise ähnlich der für Integrationstests beschrieben ( IOS , Android , Web ).
  • Testen Sie Telefonnummern mit vorkonfigurierten Codes in der Firebase-Konsole.

Ansonsten ist in Bezug auf dem Client - Code, der Telefon / SMS Authentifizierungsablauf identisch mit dem für die Herstellung beschrieben ( IOS , Android , Web ).

Verwenden der Emulator Suite-Benutzeroberfläche:

  1. In der Emulator Suite UI, klicken Sie auf die Registerkarte Authentifizierung.
  2. Klicken Sie auf die Schaltfläche Benutzer hinzufügen.
  3. Folgen Sie dem Assistenten zum Erstellen von Benutzerkonten und füllen Sie die Felder für die Telefonauthentifizierung aus.

Bei Telefonauthentifizierungsabläufen löst der Emulator jedoch KEINE Zustellung von Textnachrichten aus, da die Kontaktaufnahme mit einem Mobilfunkanbieter außerhalb des Umfangs und nicht für lokale Tests geeignet ist! Stattdessen werden die Emulator druckt den Code, der per SMS an das gleiche Endgerät gesendet worden wäre , an dem Sie lief firebase emulators:start ; Geben Sie diesen Code in die App ein, um zu simulieren, dass 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 initiieren.

Der typische Ablauf ist wie folgt.

  1. Rufen Sie Plattform signInWithPhoneNumber den Verifikationsprozess zu starten.
  2. Rufen Sie den Bestätigungs - Code unter Verwendung des Emulators spezifischen REST - Endpunkt .
  3. Call confirmationResult.confirm(code) wie gewohnt mit dem Bestätigungscode.

Emulierte Authentifizierung durch einen Drittanbieter (IDP)

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

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

  • Ihre App lässt das SDK den gesamten Prozess durchgängig abwickeln, einschließlich aller Interaktionen mit IDP-Drittanbietern, um Anmeldeinformationen abzurufen.
  • Ihre App ruft manuell Anmeldeinformationen von einem Drittanbieter mit dem SDK dieses Anbieters ab und leitet diese Anmeldeinformationen an das Authentifizierungs-SDK weiter.

Sehen Sie sich erneut den Dokumentationslink oben an und vergewissern Sie sich, dass Sie mit dem Ablauf vertraut sind – von Firebase SDK verwalteter oder manueller Abruf von Anmeldeinformationen –, den Sie verwenden möchten. Der Authentifizierungsemulator unterstützt das Testen beider Ansätze.

Testen von Firebase SDK-gesteuerten IDP-Flows

Wenn Ihre App nutzt Flow jede Firebase SDK End-to-End, wie OAuthProvider für Sign-in mit Microsoft, GitHub oder Yahoo, für interaktive Tests dient der Authentifizierung Emulator eine lokale Version des entsprechenden Anmeldeseite können Sie testen , Authentifizierung von Webanwendungen diesen Anruf der signinWithPopup oder signInWithRedirect Methode. Diese lokal bereitgestellte Anmeldeseite wird auch in mobilen Apps angezeigt und von der Webansichtsbibliothek Ihrer Plattform gerendert.

Der Emulator erstellt nach Bedarf simulierte Benutzerkonten und Anmeldeinformationen von Drittanbietern, während die Abläufe fortschreiten.

Testen von IDP-Flows mit manuellem Abrufen von Anmeldeinformationen

Wenn Sie „Manuell“ Sign-in - Techniken verwenden und Ihre Plattform nennen signInWithCredentials Methode, dann, wie üblich, wird Ihre App anfordern echte Dritt Anmelde- und realen Anmeldeinformationen von Drittanbietern abzurufen.

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

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 Steuerschnittstelle wie WebDriver. Verwenden Sie für Mobilgeräte die UI-Testtools Ihrer Plattform, wie Espresso oder Xcode.

Alternativ können Sie Ihren Code aktualisieren verwenden signInWithCredential (zB in einem Code - Zweig) und einen Token - Authentifizierungsablauf mit Mock - ID - Token für Konten anstelle von realen Anmeldeinformationen verwenden.

  1. Verdrahten Sie den Teil Ihres Codes neu oder kommentieren Sie ihn aus, der idTokens vom IDP abruft; Dadurch müssen Sie während Ihrer Tests keine echten Benutzernamen und Passwörter eingeben und Ihre Tests von API-Kontingenten und Ratenbegrenzungen beim IDP entlasten.
  2. Zweitens, einen wörtlichen JSON - String anstelle des Tokens für verwenden signInWithCredential . Am Beispiel des Web-SDK können Sie den Code wie folgt ändern:
firebase.auth().signInWithCredential(firebase.auth.GoogleAuthProvider.credential(
  '{"sub": "abc123", "email": "foo@example.com", "email_verified": true}'
));

Wenn es mit dem Emulator verwendet wird , wird dieser Code erfolgreich einen Benutzer mit E - Mail authentifiziert foo@example.com bei Google. Stellen Sie sich das Unterfeld als Primärschlüssel vor, der in eine beliebige Zeichenfolge geändert werden kann, um die Anmeldung verschiedener Benutzer zu verspotten. Sie können ersetzen firebase.auth.GoogleAuthProvider mit zum Beispiel new firebase.auth.OAuthProvider('yahoo.com') oder jeden anderen Anbieter ID Sie verspotten wollen.

Unterschiede zwischen dem Authentifizierungsemulator und der Produktion

Der Firebase Authentication-Emulator simuliert viele Funktionen des Produktionsprodukts. Da jedoch jede Art von Authentifizierungssystem stark auf Sicherheit auf mehreren Ebenen angewiesen ist (Gerät, Drittanbieter, Firebase usw.), ist es für den Emulator schwierig, alle Abläufe ordnungsgemäß neu zu erstellen.

Cloud-IAM

Die Firebase Emulator Suite versucht nicht, IAM-bezogenes Verhalten für die Ausführung zu replizieren oder zu respektieren. Emulatoren halten sich an die bereitgestellten Firebase-Sicherheitsregeln, aber in Situationen, in denen IAM normalerweise verwendet würde, z. ähnlich dem direkten Ausführen eines lokalen Skripts.

Da die E-Mail-Link-Anmeldung auf mobilen Plattformen auf Firebase Dynamic Links basiert, werden alle diese Links stattdessen auf der (mobilen) Webplattform geöffnet.

Drittanbieter-Anmeldung

Für Anmeldevorgänge von Drittanbietern stützt sich Firebase Authentication auf sichere Anmeldeinformationen von Drittanbietern wie Twitter und Github.

Echte Anmeldeinformationen von OpenID Connect-Anbietern wie Google und Apple werden vom Authentifizierungsemulator akzeptiert. Anmeldeinformationen von Nicht-OpenID Connect-Anbietern werden nicht unterstützt.

E-Mail-/SMS-Anmeldung

In Produktionsanwendungen beinhalten E-Mail- und SMS-Anmeldeabläufe einen asynchronen Vorgang, bei dem der Benutzer eine empfangene Nachricht überprüft und einen Anmeldecode in eine Anmeldeschnittstelle eingibt. Das Authentication - Emulator sendet keine E - Mails oder SMS - Nachrichten, aber wie oben , es generiert Login - Codes und gibt sie an das Endgerät bei der Prüfung verwendet werden.

Der Emulator unterstützt nicht die Möglichkeit, Testtelefonnummern mit festen Anmeldecodes zu definieren, wie dies über die Firebase-Konsole möglich ist.

Ratenbegrenzung / Missbrauchsbekämpfung

Der Authentifizierungsemulator repliziert keine Funktionen zur Begrenzung der Produktionsrate oder zur Verhinderung von Missbrauch.

Was als nächstes?

  • Für eine kuratierte Reihe von Videos und detaillierten Anleitungen zu den Beispielen, die folgen Firebase Emulatoren Trainingsplaylist .

  • Da ausgelöst Funktionen eine typische Integration mit Authentifizierung sind, erfahren Sie mehr über die Cloud - Funktionen für Firebase Emulator auf Run - Funktionen lokal .