Prima di utilizzare l'emulatore Authentication con la tua app, assicurati che tu comprenda il flusso di lavoro Firebase Local Emulator Suite generale, e che tu installi e configuri il Local Emulator Suite ed esamini i relativi comandi dell'interfaccia a riga di comando.
Questo argomento presuppone che tu abbia già familiarità con lo sviluppo Firebase Authentication soluzioni per la produzione. Se necessario, consulta la documentazione relativa alla combinazione di piattaforma e tecnica di autenticazione.
Cosa posso fare con l'emulatore Authentication?
L'Authentication emulatore fornisce un'emulazione locale ad alta fedeltà dei Firebase Authentication servizi, offrendo gran parte delle funzionalità disponibili nell' produzione Firebase Authentication. Insieme agli SDK Firebase per le piattaforme Apple, Android e web, l'emulatore ti consente di:
- Creare, aggiornare e gestire account utente emulati per testare l'autenticazione con email/password, numero di telefono/SMS, autenticazione a più fattori con SMS e provider di identità di terze parti (ad es. Google)
- Visualizzare e modificare gli utenti emulati
- Creare prototipi di sistemi di autenticazione con token personalizzati
- Controllare i messaggi relativi all'autenticazione nella scheda Log dell'interfaccia utente dell'emulatore.
Scegliere un progetto Firebase
Il Firebase Local Emulator Suite emula i prodotti per un singolo progetto Firebase.
Per selezionare il progetto da utilizzare, prima di avviare gli emulatori, esegui firebase use nella directory di lavoro nell'interfaccia a riga di comando. In alternativa, puoi passare
il --project flag a ogni comando dell'emulatore.
Local Emulator Suite supporta l'emulazione di progetti Firebase reali e progetti dimostrativi.
| Tipo di progetto | Funzionalità | Utilizzo con gli emulatori |
|---|---|---|
| Reale |
Un progetto Firebase reale è un progetto che hai creato e configurato (molto probabilmente tramite la Firebase console). 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 gli emulatori per uno o tutti i prodotti supportati. Per tutti i prodotti che non stai emulando, le tue app e il tuo codice interagiranno con la risorsa attiva (istanza di database, bucket di archiviazione, funzione e così via). |
| Dimostrativo |
Un progetto Firebase dimostrativo non ha una configurazione Firebase reale e non ha risorse attive. In genere, si accede a questi progetti tramite codelab o altri tutorial. Gli ID progetto per i progetti dimostrativi hanno il prefisso |
Quando lavori con progetti Firebase dimostrativi, le tue app e il tuo codice interagiscono con gli emulatori solo. Se la tua app tenta di interagire con una risorsa per cui non è in esecuzione un emulatore, il codice non verrà eseguito. |
Ti consigliamo di utilizzare i progetti dimostrativi, se possibile. I vantaggi includono:
- Configurazione più semplice, poiché puoi eseguire gli emulatori senza dover creare un progetto Firebase
- Maggiore sicurezza, poiché se il codice richiama accidentalmente risorse non emulate (di produzione), non c'è la possibilità di modificare i dati, l'utilizzo e la fatturazione
- Migliore supporto offline, poiché non è necessario accedere a internet per scaricare la configurazione dell'SDK.
Strumentare l'app per comunicare con l'emulatore
SDK Android, iOS e web
Configura le classi di test o la configurazione in-app per interagire con l' Authentication emulatore nel seguente modo.
Kotlin
Firebase.auth.useEmulator("10.0.2.2", 9099)
Java
FirebaseAuth.getInstance().useEmulator("10.0.2.2", 9099);
Swift
Auth.auth().useEmulator(withHost:"127.0.0.1", port:9099)
Web
import { getAuth, connectAuthEmulator } from "firebase/auth"; const auth = getAuth(); connectAuthEmulator(auth, "http://127.0.0.1:9099");
Web
const auth = firebase.auth(); auth.useEmulator("http://127.0.0.1:9099");
Non è necessaria alcuna configurazione aggiuntiva per creare prototipi e testare le interazioni tra Authentication e Cloud Functions o Firebase Security Rules per Cloud Firestore o Realtime Database. Quando l'emulatore Authentication è configurato e sono in esecuzione altri emulatori, questi funzionano automaticamente insieme.
Admin SDKs
Gli Firebase Admin SDK si connettono automaticamente all'emulatore Authentication quando viene impostata la variabile di ambiente
FIREBASE_AUTH_EMULATOR_HOST.
export FIREBASE_AUTH_EMULATOR_HOST="127.0.0.1:9099"
Tieni presente che l'emulatore Cloud Functions riconosce automaticamente l'emulatore Authentication, quindi puoi saltare questo passaggio quando testi le integrazioni tra gli emulatori Cloud Functions e Authentication. La variabile di ambiente verrà impostata automaticamente per Admin SDK in Cloud Functions.
Con la variabile di ambiente impostata, Firebase Admin SDK accetteranno i token ID
e i cookie di sessione non firmati emessi dall'Authentication emulatore (rispettivamente tramite i metodi verifyIdToken
e createSessionCookie) per facilitare lo sviluppo
e i test locali. Assicurati di non impostare la variabile di ambiente in produzione.
Se vuoi che il codice Admin SDK si connetta a un emulatore condiviso in esecuzione in
un altro ambiente, devi specificare lo stesso ID progetto che hai impostato utilizzando l'interfaccia a riga di comando di Firebase. Puoi passare un ID progetto direttamente a initializeApp o impostare la variabile di ambiente GCLOUD_PROJECT.
SDK Admin Node.js
admin.initializeApp({ projectId: "your-project-id" });
Variabile di ambiente
export GCLOUD_PROJECT="your-project-id"
Token ID
Per motivi di sicurezza, l'emulatore Authentication emette token ID non firmati, che vengono accettati solo da altri emulatori Firebase o dall'SDK Firebase Admin quando è configurato. 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).
Avviare l'emulatore
Puoi utilizzare l'emulatore Authentication in modo interattivo tramite Emulator Suite UI e in modo non interattivo tramite l'interfaccia REST locale. Le sezioni seguenti trattano i casi d'uso interattivi e non interattivi.
Per avviare l'emulatore Authentication, la relativa interfaccia REST e l' Emulator Suite UI, esegui:
firebase emulators:start
Autenticazione con email, link email e anonima emulata
Per l'autenticazione anonima, la tua app può esercitare la logica di accesso per la tua piattaforma (iOS, Android, web).
Per l'autenticazione con email/password, puoi iniziare a creare prototipi aggiungendo account utente all'emulatore Authentication dalla tua app utilizzando i metodi dell'SDK Authentication, o utilizzando l'Emulator Suite UI.
- Nell'Emulator Suite UI, fai clic sulla scheda Authentication.
- Fai clic sul pulsante Aggiungi utente.
- Segui la procedura guidata per la creazione dell'account utente, compilando i campi di autenticazione via email.
Una volta creato un utente di test, la tua app può accedere e uscire dall'account dell'utente con la logica dell'SDK per la tua piattaforma (iOS, Android, web).
Per testare la verifica dell'email/l'accesso con i flussi di link email, l'emulatore stampa un URL nel terminale in cui è stato eseguito firebase emulators:start.
i To verify the email address customer@ex.com, follow this link:
http://127.0.0.1:9099/emulator/action?mode=verifyEmail&lang=en&oobCode=XYZ123&apiKey=fake-api-keyIncolla il link nel browser per simulare l'evento di verifica e controlla se la verifica è riuscita.
{
"authEmulator": {
"success": "The email has been successfully verified.",
"email": "customer@example.com"
}
}
Per testare le reimpostazioni della password, l'emulatore stampa un URL simile, incluso un parametro newPassword (che puoi modificare in base alle esigenze), nel terminale.
http://127.0.0.1:9099/emulator/action?mode=resetPassword&oobCode=XYZ!23&apiKey=fake-api-key&newPassword=YOUR_NEW_PASSWORDTest non interattivi
Anziché utilizzare Emulator Suite UI o il codice client per gestire gli account utente con email/password, puoi scrivere script di configurazione dei test che chiamano le API REST per creare ed eliminare account utente e recuperare i codici di verifica dell'email fuori banda per popolare l'URL di verifica dell'email dell'emulatore. In questo modo, il codice della piattaforma e il codice di test rimangono separati e puoi eseguire i test in modo non interattivo.
Per i flussi di test non interattivi con email e password, la sequenza tipica è la seguente.
- Crea utenti con l'endpoint REST di registrazione dell'autenticazione Authentication .
- Accedi agli account utente utilizzando gli indirizzi email e le password per eseguire i test.
- Se applicabile ai tuoi test, recupera i codici di verifica dell'email fuori banda disponibili dall'endpoint REST specifico dell'emulatore.
- Svuota i record utente con l'endpoint REST specifico dell'emulatore per cancellare i dati.
Autenticazione con telefono/SMS emulata
Per l'autenticazione telefonica, l'emulatore di autenticazione 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).
- Numeri di telefono di test con codici preconfigurati nella Firebase console.
Per il resto, in termini di codice client, il flusso di autenticazione con telefono/SMS è identico a quello descritto per la produzione (iOS, Android, web).
Utilizzando Emulator Suite UI:
- Nell'Emulator Suite UI, fai clic sulla scheda Authentication.
- Fai clic sul pulsante Aggiungi utente.
- Segui la procedura guidata per la creazione dell'account utente, compilando i campi di autenticazione telefonica.
Tuttavia, per i flussi di autenticazione telefonica, l'emulatore NON attiverà la consegna di messaggi di testo, poiché contattare un operatore non è di competenza e non è consigliabile per i test locali. L'emulatore stampa invece il codice che sarebbe stato inviato via SMS nello stesso terminale in cui hai eseguito firebase emulators:start; inserisci questo codice nell'app per simulare gli utenti che controllano i messaggi di testo.
Test non interattivi
Per i test di autenticazione telefonica non interattivi, utilizza l'Authentication emulatore API REST per recuperare i codici SMS disponibili. Tieni presente che il codice è diverso ogni volta che avvii il flusso.
La sequenza tipica è la seguente.
- Chiama la piattaforma
signInWithPhoneNumberper avviare la procedura di verifica. - Recupera il codice di verifica utilizzando l'endpoint REST specifico dell'emulatore.
- Chiama
confirmationResult.confirm(code)come di consueto con il codice di verifica.
Autenticazione a più fattori con SMS
L'emulatore Authentication supporta la prototipazione e i test dei flussi di autenticazione a più fattori (MFA) con SMS disponibili in produzione per iOS, Android e web.
Quando aggiungi un utente simulato all'emulatore, puoi attivare l'autenticazione a più fattori e configurare uno o più numeri di telefono a cui verranno inviati i messaggi SMS del secondo fattore. I messaggi vengono inviati allo stesso terminale in cui hai eseguito firebase emulators:start e sono disponibili dall'interfaccia REST.
Autenticazione con provider di identità (IDP) di terze parti emulata
L'emulatore Authentication ti consente di testare molti flussi di autenticazione di terze parti nelle tue app per iOS, Android o web senza modifiche al codice di produzione. Per esempi di flussi di autenticazione, consulta la documentazione relativa alle varie combinazioni di provider e piattaforme che puoi utilizzare nella tua app.
In generale, puoi utilizzare l'SDK Firebase per autenticare in uno dei due modi seguenti:
- La tua app consente all'SDK di gestire l'intero processo end-to-end, incluse tutte le interazioni con i provider di identità di terze parti per recuperare le credenziali.
- La tua app recupera manualmente le credenziali da un provider di terze parti utilizzando l'SDK di questa parte e le passa all'SDK Authentication.
Ancora una volta, controlla il link alla documentazione sopra e assicurati di conoscere il flusso che vuoi utilizzare: gestione dell'SDK Firebase o recupero manuale delle credenziali. L'emulatore di Authentication supporta i test di entrambi gli approcci.
Test dei flussi IDP basati sull'SDK Firebase
Se la tua app utilizza un flusso end-to-end dell'SDK Firebase, ad esempio OAuthProvider per
l'accesso con Microsoft, GitHub o Yahoo, per i test interattivi, l'Authentication
emulatore pubblica una versione locale della pagina di accesso corrispondente per aiutarti a
testare l'autenticazione dalle app web che chiamano il metodo signinWithPopup o
signInWithRedirect. Questa pagina di accesso pubblicata localmente viene visualizzata anche nelle app per dispositivi mobili, visualizzata dalla libreria WebView della tua piattaforma.
L'emulatore crea account utente e credenziali di terze parti simulati in base alle esigenze durante l'avanzamento dei flussi.
Test dei flussi IDP con recupero manuale delle credenziali
Se utilizzi tecniche di accesso "manuali" e chiami il metodo signInWithCredentials della tua piattaforma, come di consueto, la tua app richiederà l'accesso di terze parti reale e recupererà le credenziali di terze parti reali.
Tieni presente che l'emulatore supporta solo l'autenticazione signInWithCredential per le credenziali recuperate da Accedi con Google, 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 illustra un'alternativa in questi casi.
Test non interattivi
Un approccio ai test non interattivi consiste nell'automatizzare i clic dell'utente sulla pagina di accesso pubblicata 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 della tua piattaforma, come Espresso o Xcode.
In alternativa, puoi aggiornare il codice per utilizzare signInWithCredential (ad es. in un ramo di codice) e utilizzare un flusso di autenticazione con token con token ID simulati per gli account anziché credenziali reali.
- Ricollega o commenta la parte del codice che recupera gli idToken dall'IDP. In questo modo non è necessario inserire nomi utente e password reali durante i test e i test non sono soggetti a quote API e limiti di frequenza nell'IDP.
- In secondo luogo, utilizza 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'indirizzo email foo@example.com su Google. Considera il campo sub come una chiave primaria, che può essere modificata in qualsiasi stringa, simulando l'accesso di utenti diversi. Puoi
sostituire firebase.auth.GoogleAuthProvider con, ad esempio,
new firebase.auth.OAuthProvider('yahoo.com') o qualsiasi altro ID provider che vuoi
simulare.
Autenticazione con token personalizzato emulata
L'Authentication emulatore gestisce l'autenticazione con token web JSON personalizzati utilizzando
le chiamate al metodo signInWithCustomToken sulle piattaforme supportate, come descritto
nella documentazione di produzione Authentication.
Differenze tra l'emulatore Authentication e la produzione
L'emulatore Authentication di Firebase simula molte funzionalità del prodotto di produzione. Tuttavia, poiché qualsiasi tipo di sistema di autenticazione si basa fortemente sulla sicurezza a più livelli (dispositivo, provider di terze parti, Firebase e così via), è 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 rispettano le regole di sicurezza Firebase fornite, ma nelle situazioni in cui IAM verrebbe normalmente utilizzato, ad esempio per impostare il service account di chiamata di Cloud Functions e quindi le autorizzazioni, l'emulatore non è configurabile e utilizzerà l'account disponibile a livello globale sulla macchina dello sviluppatore, in modo simile all'esecuzione diretta di uno script locale.
Accesso tramite link email su dispositivo mobile
Poiché sulle piattaforme mobile l'accesso tramite link email si basa su Firebase Dynamic Links, tutti questi link verranno aperti sulla piattaforma web (mobile).
Third-party sign-in
Per i flussi di accesso di terze parti, Firebase Authentication 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 vengono accettate dall'emulatore Authentication. Le credenziali dei provider non OpenID Connect non sono supportate.
Accesso con email / SMS
Nelle app di produzione, i flussi di accesso con email e SMS comportano un'operazione asincrona in cui l'utente controlla un messaggio ricevuto e inserisce un codice di accesso in un'interfaccia di accesso. L'Authentication emulatore non invia email o messaggi SMS , ma, come descritto sopra, genera codici di accesso e li invia al terminale per essere utilizzati nei test.
L'emulatore non supporta la possibilità di definire numeri di telefono di test con codici di accesso fissi, come si può fare utilizzando la Firebase console.
Autenticazione con token personalizzato
L'emulatore Authentication non convalida la firma o la scadenza dei token personalizzati. In questo modo, puoi utilizzare token creati manualmente e riutilizzare i token a tempo indeterminato negli scenari di prototipazione e test.
Limitazione di frequenza / anti-abuso
L'emulatore Authentication non replica le funzionalità di limitazione di frequenza o anti-abuso di produzione.
Funzioni di blocco
In produzione, gli utenti vengono scritti nell'archivio una sola volta dopo l'attivazione degli eventi beforeCreate e beforeSignIn. Tuttavia, a causa di limitazioni tecniche,
l'emulatore Authentication scrive nel datastore due volte, una dopo la creazione dell'utente e
un'altra dopo l'accesso. Ciò significa che, per i nuovi utenti, puoi chiamare correttamente
getAuth().getUser() in beforeSignIn nell'Authentication emulatore, ma si verificherà
un errore in produzione.
Cosa devo fare adesso?
Per una serie di video e esempi pratici dettagliati, segui la playlist di formazione su Firebase Emulators.
Poiché le funzioni attivate sono un'integrazione tipica con Authentication, scopri di più sull'emulatore di Cloud Functions per Firebase in Eseguire le funzioni in locale.