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

Connetti la tua app all'emulatore di autenticazione

Prima di utilizzare il l'emulatore di autenticazione con voi app, assicurarsi che si capisce il flusso di lavoro complessivo Firebase locale emulatore Suite , e che si installa e si configura l'emulatore Suite locale e rivedere i suoi comandi CLI .

Cosa posso fare con l'emulatore di autenticazione?

L'emulatore di autenticazione fornisce ad alta fedeltà di emulazione locale dei servizi Firebase di autenticazione, che fornisce molte delle funzionalità si trovano in produzione Firebase autenticazione . Abbinato alle piattaforme Apple, agli SDK Android e Web Firebase, l'emulatore ti consente di:

  • Crea, aggiorna e gestisci account utente emulati per testare email/password, numero di telefono/SMS e accesso con provider di identità di terze parti (come Google)
  • Visualizza e modifica gli utenti emulati
  • Controllare i messaggi relativi all'autenticazione nella scheda Registri dell'interfaccia utente dell'emulatore.

Scegli un progetto Firebase

Firebase Local Emulator Suite emula i prodotti per un singolo progetto Firebase.

Per selezionare il progetto per l'uso, prima di iniziare gli emulatori, nella corsa CLI firebase use nella vostra directory di lavoro. In alternativa, è possibile passare l' --project bandiera per ogni comando emulatore.

Locale Emulator Suite supporta l'emulazione di progetti Firebase reali e demo di progetti.

Tipo di progetto Caratteristiche Utilizzare con emulatori
Vero

Un vero progetto Firebase è quello che hai creato e configurato (molto probabilmente tramite la console Firebase).

I progetti reali hanno risorse attive, come istanze di database, bucket di archiviazione, funzioni o qualsiasi altra risorsa configurata per quel progetto Firebase.

Quando lavori con progetti Firebase reali, puoi eseguire emulatori per uno o tutti i prodotti supportati.

Per tutti i prodotti che non sono emulando, le applicazioni e il codice potranno interagire con la risorsa dal vivo (istanza di database, benna di immagazzinaggio, funzione, ecc).

Dimostrazione

Un progetto Firebase demo ha alcuna reale configurazione Firebase e senza risorse dal vivo. Questi progetti sono generalmente accessibili tramite codelab o altri tutorial.

Progetto ID per demo progetti hanno la demo- prefisso.

Quando si lavora con progetti dimostrativi Firebase, le applicazioni e il codice interagiscono solo con emulatori. Se la tua app tenta di interagire con una risorsa per la quale non è in esecuzione un emulatore, il codice avrà esito negativo.

Ti consigliamo di utilizzare progetti demo ove possibile. I vantaggi includono:

  • Configurazione più semplice, poiché puoi eseguire gli emulatori senza mai creare un progetto Firebase
  • Maggiore sicurezza, poiché se il tuo codice richiama accidentalmente risorse (di produzione) non emulate, non c'è possibilità di modifica dei dati, utilizzo e fatturazione
  • Migliore supporto offline, poiché non è necessario accedere a Internet per scaricare la configurazione dell'SDK.

Configura la tua app per parlare con l'emulatore di autenticazione

SDK per Android, iOS e Web

Configura la configurazione in-app o le classi di test per interagire con l'emulatore di autenticazione come segue.

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

Versione web 9

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

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

Versione web 8

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

Non è necessaria alcuna configurazione aggiuntiva per prototipare e testare le interazioni tra l'autenticazione e le funzioni cloud o le regole di sicurezza Firebase per Cloud Firestore o Realtime Database. Quando l'emulatore di autenticazione è configurato e altri emulatori sono in esecuzione, funzionano automaticamente insieme.

SDK di amministrazione

Il Firebase Admin SDK si connette automaticamente alla emulatore di autenticazione quando il FIREBASE_AUTH_EMULATOR_HOST è impostato variabile di ambiente.

export FIREBASE_AUTH_EMULATOR_HOST="localhost:9099"

Tieni presente che l'emulatore di Cloud Functions riconosce automaticamente l'emulatore di autenticazione, quindi puoi saltare questo passaggio durante il test delle integrazioni tra Cloud Functions e gli emulatori di autenticazione. La variabile di ambiente verrà impostata automaticamente per Admin SDK in Cloud Functions.

Con il set variabile di ambiente, Firebase Admin SDK accetterà senza segno cookie ID di sessione Gettoni e rilasciate dalla emulatore di autenticazione (via verifyIdToken e createSessionCookie rispettivamente metodi) per facilitare developmemt e la sperimentazione locale. Si prega di fare attenzione a non impostare la variabile d'ambiente nella produzione.

Quando ci si connette all'emulatore di autenticazione, sarà necessario specificare un ID progetto. È possibile passare un ID progetto per initializeApp direttamente o impostare la GCLOUD_PROJECT variabile d'ambiente. Tieni presente che non è necessario utilizzare il tuo vero ID progetto Firebase; l'emulatore di autenticazione accetterà qualsiasi ID progetto.

SDK di amministrazione di Node.js
admin.initializeApp({ projectId: "your-project-id" });
Variabile d'ambiente
export GCLOUD_PROJECT="your-project-id"

Token ID

Per motivi di sicurezza, l'autenticazione emulatore problemi token ID senza segno, che sono accettate solo da altri emulatori Firebase, o la Firebase Admin SDK quando configurati . Questi token verranno rifiutati dai servizi Firebase di produzione o dall'SDK Firebase Admin in esecuzione in modalità di produzione (ad es. il comportamento predefinito senza i passaggi di configurazione descritti sopra).

Per iniziare la prototipazione interattiva con l'emulatore di autenticazione e l'interfaccia utente di Emulator Suite, avviare Firebase Local Emulator Suite.

firebase emulators:start

Per l'autenticazione anonima, la vostra applicazione può esercitare il segno-in logica per la piattaforma ( iOS , Android , web ).

Per l'autenticazione e-mail / password, è possibile avviare la prototipazione con l'aggiunta di account utente per l'emulatore di autenticazione dalla tua app utilizzando metodi di autenticazione SDK, oppure utilizzando l'emulatore Suite UI.

  1. Nell'emulatore Suite interfaccia utente, fare clic sulla scheda Autenticazione.
  2. Fare clic sul pulsante Aggiungi utente.
  3. Segui la procedura guidata per la creazione dell'account utente, compilando i campi di autenticazione della posta elettronica.

Con un utente di prova creata, la tua applicazione può accedere l'utente dentro e fuori con la logica SDK per la piattaforma ( iOS , Android , web ).

Per testare la verifica email / sign-in con collegamento e-mail scorre, l'emulatore stampa un URL al terminale in cui firebase emulators:start è stato eseguito.

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

Incolla il link nel tuo browser per simulare l'evento di verifica e controlla se la verifica è andata a buon fine.

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

Per testare la reimpostazione delle password, l'emulatore stampa un URL simile, tra cui un parametro newPassword (che è possibile modificare, se necessario), al terminale.

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

Test non interattivi

Invece di utilizzare l'interfaccia utente di Emulator Suite o il codice client per gestire gli account utente e-mail/password, è possibile scrivere script di configurazione di prova che chiamano le API REST per creare ed eliminare account utente e recuperare codici di verifica e-mail fuori banda per popolare la verifica e-mail dell'emulatore URL. Ciò mantiene la piattaforma e il codice di test separati e consente di eseguire test in modo non interattivo.

Per i flussi di test di e-mail e password non interattivi, la sequenza tipica è la seguente.

  1. Creare gli utenti con l'autenticazione degli endpoint di iscrizione REST .
  2. Accedi agli utenti utilizzando le e-mail e le password per eseguire i test.
  3. Se applicabile alle vostre prove, andare a prendere i codici di verifica di posta elettronica disponibili out-of-band dal emulatore specifico REST endpont .
  4. Record utente a filo con l'emulatore specifico endpoint REST per i dati di compensazione.

Autenticazione emulata del telefono/SMS

Per l'autenticazione del telefono, l'emulatore Auth non supporta:

  • Flussi reCAPTCHA e APN. Una volta configurato per interagire con l'emulatore, SDK client disattivano questi metodi di verifica in un modo simile a quello descritto per il test di integrazione ( IOS , Android , web ).
  • Testa i numeri di telefono con i codici preconfigurati nella console Firebase.

In caso contrario, in termini di codice del client, il flusso di autenticazione del telefono / SMS è identica a quella descritta per la produzione ( iOS , Android , web ).

Utilizzo dell'interfaccia utente di Emulator Suite:

  1. Nell'emulatore Suite interfaccia utente, fare clic sulla scheda Autenticazione.
  2. Fare clic sul pulsante Aggiungi utente.
  3. Segui la procedura guidata per la creazione dell'account utente, compilando i campi di autenticazione del telefono.

Tuttavia, per i flussi di autenticazione del telefono, l'emulatore NON attiverà la consegna di messaggi di testo, poiché contattare un corriere è fuori portata e non è amichevole per i test locali! Invece, le stampe emulatore fuori il codice che sarebbe stato inviato via SMS allo stesso terminale in cui è stato eseguito firebase emulators:start ; inserisci questo codice nell'app per simulare gli utenti che controllano i loro messaggi di testo.

Test non interattivi

Per i test di autenticazione del telefono non interattivi, utilizzare l'API REST dell'emulatore di autenticazione per recuperare i codici SMS disponibili. Tieni presente che il codice è diverso ogni volta che avvii il flusso.

La sequenza tipica è la seguente.

  1. Chiamata piattaforma signInWithPhoneNumber per avviare il processo di verifica.
  2. Recuperare il codice di verifica utilizzando il REST specifico endpoint-emulatore .
  3. Chiamata confirmationResult.confirm(code) come al solito con il codice di verifica.

Autenticazione emulata di provider di identità di terze parti (IDP)

L'emulatore di autenticazione ti consente di testare molti flussi di autenticazione di terze parti nelle tue app iOS, Android o Web senza modifiche dal codice di produzione. Per esempi di flussi di autenticazione, consultare la documentazione per le varie combinazioni di fornitori e piattaforme è possibile utilizzare nella vostra applicazione .

In generale, puoi utilizzare l'SDK Firebase per eseguire l'autenticazione in due modi:

  • La tua app consente all'SDK di gestire l'intero processo end-to-end, incluse tutte le interazioni con provider IDP di terze parti per recuperare le credenziali.
  • La tua app recupera manualmente le credenziali da un provider di terze parti utilizzando l'SDK di quella parte e le passa all'SDK di autenticazione.

Ancora una volta, controlla il collegamento alla documentazione sopra e assicurati di avere familiarità con il flusso - gestito da Firebase SDK e recupero manuale delle credenziali - che desideri utilizzare. L'emulatore di autenticazione supporta il test di entrambi gli approcci.

Test dei flussi IDP basati su Firebase SDK

Se la vostra applicazione utilizza qualsiasi end-to-end di flusso Firebase SDK, come OAuthProvider per il segno-in con Microsoft, GitHub, o Yahoo, per il test interattivo, l'emulatore di autenticazione serve una versione locale della pagina di accesso corrispondenti che consentono di verificare l'autenticazione da applicazioni web che la chiamata signinWithPopup o signInWithRedirect metodo. Questa pagina di accesso gestita localmente viene visualizzata anche nelle app mobili, renderizzata dalla libreria di visualizzazioni web della tua piattaforma.

L'emulatore crea account utente e credenziali di terze parti fittizi in base alle esigenze man mano che i flussi procedono.

Test dei flussi IDP con il recupero manuale delle credenziali

Se si utilizza di sign-in "manuale" Tecniche e chiamare della vostra piattaforma signInWithCredentials metodo, poi, come al solito, la vostra applicazione sarà richiesta vero segno-in di terze parti e di recuperare le credenziali reali di terze parti.

Si noti che l'emulatore supporta solo signInWithCredential l'autenticazione delle credenziali recuperati da Google Sign-In, Apple, e altri fornitori che l'uso ID gettoni implementato come JSON Web Gettoni (JWTs). I token di accesso (ad es. quelli forniti da Facebook o Twitter, che non sono JWT) non sono supportati. La sezione successiva discute un'alternativa in questi casi.

Test non interattivi

Un approccio ai test non interattivi consiste nell'automatizzare i clic degli utenti sulla pagina di accesso fornita dall'emulatore. Per le app web, usa un'interfaccia di controllo come WebDriver. Per i dispositivi mobili, utilizza gli strumenti di test dell'interfaccia utente della tua piattaforma, come Espresso o Xcode.

In alternativa, è possibile aggiornare il codice per utilizzare signInWithCredential (ad esempio, in un ramo di codice) e utilizzare un flusso di token di autenticazione con token ID finto per i conti, invece di credenziali reali.

  1. Ricollegare o commentare la parte del codice che recupera gli idToken dall'IDP; questo elimina la necessità di inserire nomi utente e password reali durante i test e solleva i test dalle quote API e dai limiti di velocità presso l'IDP.
  2. In secondo luogo, utilizzare una stringa JSON letterale al posto del gettone per signInWithCredential . Utilizzando l'SDK web come esempio, puoi modificare il codice in:
firebase.auth().signInWithCredential(firebase.auth.GoogleAuthProvider.credential(
  '{"sub": "abc123", "email": "foo@example.com", "email_verified": true}'
));

Quando viene utilizzato con l'emulatore, questo codice autenticherà con successo un utente con e-mail foo@example.com a Google. Pensa al sottocampo come a una chiave primaria, che può essere modificata in qualsiasi stringa, simulando l'accesso a diversi utenti. È possibile sostituire firebase.auth.GoogleAuthProvider con, ad esempio, new firebase.auth.OAuthProvider('yahoo.com') o qualsiasi altro ID provider che volete prendere in giro.

In che modo l'emulatore di autenticazione differisce dalla produzione

L'emulatore Firebase Authentication simula molte funzionalità del prodotto di produzione. Tuttavia, poiché qualsiasi tipo di sistema di autenticazione si basa molto sulla sicurezza a più livelli (dispositivo, provider di terze parti, Firebase, ecc.), è difficile per l'emulatore ricreare correttamente tutti i flussi.

Cloud IAM

Firebase Emulator Suite non tenta di replicare o rispettare alcun comportamento correlato a IAM per l'esecuzione. Gli emulatori aderiscono alle regole di sicurezza Firebase fornite, ma in situazioni in cui IAM verrebbe normalmente utilizzato, ad esempio per impostare Cloud Functions che richiama l'account di servizio e quindi le autorizzazioni, l'emulatore non è configurabile e utilizzerà l'account disponibile a livello globale sul computer dello sviluppatore, simile all'esecuzione diretta di uno script locale.

Poiché sulle piattaforme mobili, l'accesso tramite collegamento e-mail si basa su Firebase Dynamic Links, tutti questi collegamenti verranno invece aperti sulla piattaforma Web (mobile).

Accesso di terze parti

Per i flussi di accesso di terze parti, l'autenticazione Firebase si basa su credenziali sicure di provider di terze parti come Twitter e Github.

Le credenziali reali dei provider OpenID Connect come Google e Apple sono accettate dall'emulatore di autenticazione. Le credenziali di provider non OpenID Connect non sono supportate.

Accesso e-mail/SMS

Nelle app di produzione, i flussi di accesso e-mail e SMS comportano un'operazione asincrona in cui l'utente controlla un messaggio ricevuto e immette un codice di accesso in un'interfaccia di accesso. L'emulatore autenticazione non invia alcun email o messaggi SMS, ma come descritto in precedenza , esso genera login codici e loro uscita al terminale da usare in fase di test.

L'emulatore non supporta la possibilità di definire numeri di telefono di prova con codici di accesso fissi come può essere fatto utilizzando la console Firebase.

Limitazione delle tariffe / anti-abuso

L'emulatore di autenticazione non replica le funzionalità di limitazione della velocità di produzione o anti-abuso.

E dopo?