Catch up on everything announced at Firebase Summit, and learn how Firebase can help you accelerate app development and run your app with confidence. Learn More

Collega la tua app all'emulatore di autenticazione

Mantieni tutto organizzato con le raccolte Salva e classifica i contenuti in base alle tue preferenze.

Prima di utilizzare l'emulatore di autenticazione con l'app, assicurati di aver compreso il flusso di lavoro generale di Firebase Local Emulator Suite e di installare e configurare Local Emulator Suite e di rivedere i suoi comandi CLI .

Questo argomento presuppone che tu abbia già familiarità con lo sviluppo di soluzioni di autenticazione Firebase per la produzione. Se necessario, consulta la documentazione per la tua combinazione di piattaforma e tecnica di autenticazione .

Cosa posso fare con l'emulatore di autenticazione?

L'emulatore di autenticazione fornisce un'emulazione locale ad alta fedeltà dei servizi di autenticazione Firebase, fornendo gran parte delle funzionalità presenti nell'autenticazione Firebase di produzione . Associato alle piattaforme Apple, agli SDK Android e Web Firebase, l'emulatore consente di:

  • Crea, aggiorna e gestisci account utente emulati per testare e-mail/password, numero di telefono/SMS, SMS multifattore e autenticazione di provider di identità di terze parti (ad es. Google)
  • Visualizza e modifica gli utenti emulati
  • Prototipi di sistemi di autenticazione token personalizzati
  • Controlla 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 da utilizzare, prima di avviare gli emulatori, nella CLI esegui firebase use nella tua directory di lavoro. Oppure puoi passare il flag --project a ciascun comando dell'emulatore.

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

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 in tempo reale, 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 stai emulando, le tue app e il codice interagiranno con la risorsa live (istanza del database, bucket di archiviazione, funzione, ecc.).

Demo

Un progetto Firebase demo non ha una configurazione Firebase reale e nessuna risorsa attiva. Questi progetti sono generalmente accessibili tramite codelab o altri tutorial.

Gli ID progetto per i progetti demo hanno il demo- demo.

Quando lavori con progetti Firebase demo, le tue app e il codice interagiscono solo con gli emulatori . Se l'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 codice richiama accidentalmente risorse (di produzione) non emulate, non vi è alcuna possibilità di modifica, utilizzo e fatturazione dei dati
  • Migliore supporto offline, poiché non è necessario accedere a Internet per scaricare la configurazione dell'SDK.

Strumento la tua app per parlare con l'emulatore

SDK per Android, iOS e Web

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

Androide
FirebaseAuth.getInstance().useEmulator("10.0.2.2", 9099);
Veloce
Auth.auth().useEmulator(withHost:"localhost", port:9099)

Web version 9

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

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

Web version 8

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

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

SDK di amministrazione

Gli SDK Firebase Admin si connettono automaticamente all'emulatore di autenticazione quando viene impostata la variabile di ambiente FIREBASE_AUTH_EMULATOR_HOST .

export FIREBASE_AUTH_EMULATOR_HOST="localhost:9099"

Tieni presente che l'emulatore di Cloud Functions è automaticamente a conoscenza dell'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 la variabile di ambiente impostata, gli SDK di amministrazione Firebase accetteranno token ID non firmati e cookie di sessione emessi dall'emulatore di autenticazione (tramite i metodi verifyIdToken e createSessionCookie rispettivamente) per facilitare lo sviluppo e il test locali. Assicurati di non impostare la variabile di ambiente in produzione.

Se desideri che il codice dell'SDK di amministrazione si connetta a un emulatore condiviso in esecuzione in un altro ambiente, dovrai specificare lo stesso ID progetto che hai impostato utilizzando l'interfaccia a riga di comando di Firebase . Puoi passare un ID progetto per initializeApp direttamente o impostare la variabile di ambiente GCLOUD_PROJECT .

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

Token ID

Per motivi di sicurezza, l'emulatore di autenticazione emette token ID non firmati , che vengono accettati solo da altri emulatori Firebase, o Firebase Admin SDK se configurato . Questi token verranno rifiutati dai servizi Firebase di produzione o dall'SDK di amministrazione Firebase in esecuzione in modalità di produzione (ad esempio, il comportamento predefinito senza i passaggi di configurazione descritti sopra).

Avvia l'emulatore

È possibile utilizzare l'emulatore di autenticazione in modo interattivo tramite l'interfaccia utente di Emulator Suite e in modo non interattivo tramite l'interfaccia REST locale. Le sezioni seguenti trattano casi d'uso interattivi e non interattivi.

Per avviare l'emulatore di autenticazione, la sua interfaccia REST e l'interfaccia utente di Emulator Suite, eseguire:

firebase emulators:start

Per l'autenticazione anonima , la tua app può esercitare la logica di accesso per la tua piattaforma ( iOS , Android , Web ).

Per l'autenticazione tramite e-mail/password , puoi iniziare la prototipazione aggiungendo account utente all'emulatore di autenticazione dalla tua app usando i metodi dell'SDK di autenticazione o usando l'interfaccia utente di Emulator Suite.

  1. Nell'interfaccia utente di Emulator Suite, 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 e-mail.

Con un utente di prova creato, la tua app può accedere e disconnettere l'utente con la logica SDK per la tua piattaforma ( iOS , Android , Web ).

Per testare la verifica dell'e-mail/l'accesso con i flussi di collegamento e-mail, l'emulatore stampa un URL sul terminale in cui è stato eseguito firebase emulators:start .

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 collegamento nel browser per simulare l'evento di verifica e verifica se la verifica è riuscita.

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

Per testare la reimpostazione della password, l'emulatore stampa un URL simile, incluso un parametro newPassword (che puoi modificare secondo necessità), sul 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, puoi scrivere script di configurazione di prova che chiamano 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 ti consente di testare in modo non interattivo.

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

  1. Crea utenti con l' endpoint REST per la registrazione dell'autenticazione.
  2. Accedi agli utenti utilizzando le e-mail e le password per eseguire i test.
  3. Se applicabile ai tuoi test, recupera i codici di verifica e-mail fuori banda disponibili dall'endpont REST specifico dell'emulatore .
  4. Svuota i record utente con l' endpoint REST specifico dell'emulatore per cancellare i dati.

Autenticazione telefono/SMS emulata

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

  • flussi reCAPTCHA e APN. Una volta configurati per interagire con l'emulatore, gli SDK client disabilitano questi metodi di verifica in modo simile a quello descritto per i test di integrazione ( iOS , Android , web ).
  • Prova i numeri di telefono con i codici preconfigurati nella console Firebase.

Diversamente, in termini di codice client, il flusso di autenticazione telefono/SMS è identico a quello descritto per la produzione ( iOS , Android , web ).

Utilizzo dell'interfaccia utente di Emulator Suite:

  1. Nell'interfaccia utente di Emulator Suite, 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 alcun messaggio di testo, poiché contattare un operatore è fuori portata e non è facile per i test locali! Invece, l'emulatore stampa il codice che sarebbe stato inviato via SMS allo stesso terminale su cui hai eseguito firebase emulators:start ; inserisci questo codice nell'app per simulare gli utenti che controllano i loro messaggi di testo.

Test non interattivi

Per il test di autenticazione del telefono non interattivo, 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. Chiama la piattaforma signInWithPhoneNumber per avviare il processo di verifica.
  2. Recupera il codice di verifica utilizzando l' endpoint REST specifico dell'emulatore .
  3. Chiama confirmationResult.confirm(code) come di consueto con il codice di verifica.

SMS multifattoriale

L'emulatore di autenticazione supporta la prototipazione e il test dei flussi di autenticazione a più fattori (MFA) SMS disponibili in produzione per iOS , Android e Web .

Quando aggiungi un utente fittizio all'emulatore, puoi abilitare MFA e configurare uno o più numeri di telefono a cui verranno inviati i messaggi SMS di secondo fattore. I messaggi vengono inviati allo stesso terminale su cui hai eseguito firebase emulators:start e sono disponibili dall'interfaccia REST.

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

L'emulatore di autenticazione ti consente di testare molti flussi di autenticazione di terze parti nelle tue app iOS, Android o Web senza modifiche rispetto al codice di produzione. Per esempi di flussi di autenticazione, consulta la documentazione per le varie combinazioni di provider e piattaforme che puoi utilizzare nella tua app .

In generale, puoi utilizzare Firebase SDK per autenticarti in uno dei due modi seguenti:

  • La tua app consente all'SDK di gestire l'intero processo end-to-end, comprese tutte le interazioni con provider IDP di terze parti per recuperare le credenziali.
  • L'app recupera manualmente le credenziali da un provider di terze parti utilizzando l'SDK di tale parte e le trasmette 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 tua app utilizza un flusso end-to-end di Firebase SDK, come OAuthProvider per l'accesso con Microsoft, GitHub o Yahoo, per test interattivi, l'emulatore di autenticazione fornisce una versione locale della pagina di accesso corrispondente per aiutarti a testare autenticazione da app Web che chiamano il metodo signinWithPopup o signInWithRedirect . Questa pagina di accesso servita localmente viene visualizzata anche nelle app mobili, resa dalla libreria WebView della tua piattaforma.

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

Test dei flussi IDP con recupero manuale delle credenziali

Se utilizzi tecniche di accesso "manuale" e chiami il metodo signInWithCredentials della tua piattaforma, come al solito la tua app richiederà l'accesso di terze parti reali e recupererà credenziali di terze parti reali.

Tieni presente che l'emulatore supporta solo l'autenticazione signInWithCredential per le credenziali recuperate da Google Sign-In, Apple e altri provider che utilizzano token ID implementati come token Web JSON (JWT). 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 al test non interattivo consiste nell'automatizzare i clic degli utenti sulla pagina di accesso servita dall'emulatore. Per le app Web, utilizza un'interfaccia di controllo come WebDriver. Per i dispositivi mobili, utilizza gli strumenti di test dell'interfaccia utente dalla tua piattaforma, come Espresso o Xcode.

In alternativa, puoi aggiornare il tuo codice per utilizzare signInWithCredential (ad esempio in un ramo di codice) e utilizzare un flusso di autenticazione token con token ID fittizi per account anziché credenziali reali.

  1. Ricablare o commentare la parte del codice che recupera idTokens dall'IDP; questo elimina la necessità di inserire nomi utente e password reali durante i test e allevia i test dalle quote API e dai limiti di frequenza all'IDP.
  2. In secondo luogo, usa una stringa JSON letterale al posto del token 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}'
));

Se utilizzato con l'emulatore, questo codice autenticherà correttamente un utente con l'email foo@example.com su Google. Pensa al campo secondario come a una chiave primaria, che può essere modificata in qualsiasi stringa, simulando l'accesso a utenti diversi. Puoi sostituire firebase.auth.GoogleAuthProvider con, ad esempio, new firebase.auth.OAuthProvider('yahoo.com') o qualsiasi altro ID provider che desideri prendere in giro.

Autenticazione del token personalizzato emulato

L'emulatore di autenticazione gestisce l'autenticazione con token Web JSON personalizzati utilizzando le chiamate al metodo signInWithCustomToken sulle piattaforme supportate, come descritto nella documentazione di autenticazione di produzione .

In che modo l'emulatore di autenticazione differisce dalla produzione

L'emulatore di autenticazione Firebase simula molte funzionalità del prodotto di produzione. Tuttavia, poiché qualsiasi tipo di sistema di autenticazione fa molto affidamento 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 relativo 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 richiamando l'account di servizio e quindi le autorizzazioni, l'emulatore non è configurabile e utilizzerà l'account disponibile a livello globale sulla macchina dello sviluppatore, simile all'esecuzione diretta di uno script locale.

Poiché sulle piattaforme mobili, l'accesso ai collegamenti e-mail si basa su Firebase Dynamic Links, tutti questi collegamenti verranno aperti invece 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.

E-mail/SMS di accesso

Nelle app di produzione, i flussi di accesso tramite posta elettronica e SMS implicano un'operazione asincrona in cui l'utente controlla un messaggio ricevuto e immette un codice di accesso in un'interfaccia di accesso. L'emulatore di autenticazione non invia e-mail o SMS, ma, come descritto sopra , genera codici di accesso e li invia al terminale da utilizzare per il 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.

Autenticazione token personalizzata

L'emulatore di autenticazione non convalida la firma o la scadenza dei token personalizzati. Ciò ti consente di utilizzare token realizzati a mano e di riutilizzarli indefinitamente negli scenari di prototipazione e test.

Limitazione della tariffa / anti-abuso

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

E dopo?