Prima di utilizzare l'emulatore Authentication con la tua app, assicurati di comprendere il flusso di lavoro complessivo di Firebase Local Emulator Suite, di installare e configurare Local Emulator Suite e di esaminare i relativi comandi CLI.
Questo argomento presuppone che tu abbia già familiarità con lo sviluppo di soluzioni Firebase Authentication 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'emulatore Authentication fornisce l'emulazione locale ad alta precisione dei servizi Firebase Authentication, fornendo molte delle funzionalità presenti nella produzione Firebase Authentication. Se abbinato alle piattaforme Apple, gli SDK Firebase per Android e web, l'emulatore ti consente di:
- Creare, aggiornare e gestire account utente emulati per testare email/password, numeri di telefono/SMS, SMS a più fattori e autenticazione da provider di identità di terze parti (ad es. Google)
- Visualizzare e modificare gli utenti emulati
- Realizzare prototipi di sistemi di autenticazione dei token personalizzati
- Controlla i messaggi relativi all'autenticazione nella scheda Log 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, esegui firebase use
nella directory di lavoro in CLI. In alternativa, puoi passare il flag --project
a ogni comando dell'emulatore.
Local Emulator Suite supporta l'emulazione di progetti Firebase reali e demo.
Tipo di progetto | Funzionalità | Utilizzo con emulatori |
---|---|---|
Reale |
Un progetto Firebase reale è un progetto creato e configurato da te (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 il 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 tuo codice interagiranno con la risorsa in produzione (istanza di database, bucket di archiviazione, funzione e così via). |
Demo |
Un progetto Firebase dimostrativo non ha una configurazione Firebase reale o risorse attive. In genere, questi progetti sono accessibili tramite codelab o altri tutorial. Gli ID progetto per i progetti demo hanno il prefisso |
Quando utilizzi progetti Firebase di prova, le tue app e il tuo codice interagiscono solo con gli emulatori. Se la tua app tenta di interagire con una risorsa per cui non è in esecuzione un emulatore, il codice non andrà a buon fine. |
Ti consigliamo di utilizzare progetti demo, 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'è alcuna possibilità di modifica, utilizzo e fatturazione dei dati
- Migliore assistenza offline, poiché non è necessario accedere a internet per scaricare la configurazione dell'SDK.
Strumenti per l'app per comunicare con l'emulatore
SDK per Android, iOS e web
Configura la configurazione in-app o le classi di test per interagire con l'emulatoreAuthentication come segue.
Kotlin+KTX
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 prototipare 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 altri emulatori sono in esecuzione, funzionano automaticamente insieme.
Admin SDK s
Gli Firebase Admin SDK si connettono automaticamente all'emulatore Authentication quando
è 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 è automaticamente a conoscenza dell'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 accetterà token ID non firmati e cookie di sessione emessi dall'emulatore Authentication (rispettivamente tramite i metodi verifyIdToken
e createSessionCookie
) per facilitare lo sviluppo e il test locale. Assicurati di non impostare la variabile di ambiente in produzione.
Se vuoi che il codice Admin SDK si connetta a un emulatore condiviso in un altro ambiente, devi specificare lo stesso ID progetto impostato utilizzando Firebase CLI. 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 se configurato. Questi token verranno rifiutati dai servizi Firebase di produzione o dall'SDK Admin Firebase in esecuzione in modalità di produzione (ad es. il comportamento predefinito senza i passaggi di configurazione descritti sopra).
Avvia l'emulatore
Puoi utilizzare l'emulatore Authentication in modo interattivo tramite Emulator Suite UI e non in modo interattivo tramite la sua interfaccia REST locale. Le sezioni che seguono coprono casi d'uso interattivi e non interattivi.
Per avviare l'emulatore Authentication, la relativa interfaccia REST e Emulator Suite UI, esegui:
firebase emulators:start
Email simulata, link email e autenticazione anonima
Per l'autenticazione anonima, la tua app può applicare la logica di accesso per la tua piattaforma (iOS, Android, web).
Per l'autenticazione email/password, puoi iniziare la prototipazione aggiungendo account utente all'emulatore Authentication dalla tua app utilizzando i metodi SDK Authentication oppure usando Emulator Suite UI.
- In Emulator Suite UI, fai clic sulla scheda Autenticazione.
- Fai clic sul pulsante Aggiungi utente.
- Segui la procedura guidata di creazione dell'account utente, compilando i campi di autenticazione email.
Dopo aver creato un utente di test, la tua app può eseguire l'accesso e la disconnessione dell'utente con la logica SDK per la tua piattaforma (iOS, Android, web).
Per testare la verifica email/l'accesso con i flussi di link email, 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://127.0.0.1:9099/emulator/action?mode=verifyEmail&lang=en&oobCode=XYZ123&apiKey=fake-api-key
Incolla il link nel 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 le reimpostazione delle password, l'emulatore stampa un URL simile, incluso un parametro newPassword (che puoi modificare in base alle esigenze), sul terminale.
http://127.0.0.1:9099/emulator/action?mode=resetPassword&oobCode=XYZ!23&apiKey=fake-api-key&newPassword=YOUR_NEW_PASSWORD
Test non interattivi
Anziché utilizzare Emulator Suite UI o il codice client per gestire gli account utente email/password, puoi scrivere script di configurazione di test che chiamano le API REST per creare ed eliminare gli account utente e recuperare i codici di verifica email fuori banda per compilare l'URL di verifica email dell'emulatore. In questo modo la piattaforma e il codice di test sono separati e puoi eseguire test non interattivi.
Per i flussi di test di email e password non interattivi, la sequenza tipica è la seguente.
- Crea gli utenti con l'Authentication endpoint REST signUp.
- Accedi agli utenti utilizzando le email e le password per eseguire i test.
- Se applicabile ai test, recupera i codici di verifica email fuori banda disponibili dall'endpoint REST specifico dell'emulatore.
- Svuotare i record utente con l'endpoint REST specifico dell'emulatore per cancellare i dati.
Autenticazione telefonica/SMS simulata
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 disattivano questi metodi di verifica in modo simile a quanto descritto per i test di integrazione (iOS, Android, web).
- Numeri di telefono di prova con codici preconfigurati nella console Firebase.
In caso contrario, in termini di codice client, il flusso di autenticazione telefonica/SMS è identico a quello descritto per il canale di produzione (iOS, Android, web).
Utilizzo di Emulator Suite UI:
- In Emulator Suite UI, fai clic sulla scheda Autenticazione.
- Fai clic sul pulsante Aggiungi utente.
- Segui la procedura guidata di creazione dell'account utente, compilando i campi di autenticazione telefonica.
Tuttavia, per i flussi di autenticazione dello smartphone, l'emulatore NON attiverà l'invio di SMS, poiché contattare un operatore non rientra nell'ambito e non è agevole per i test locali. L'emulatore stampa invece il codice che sarebbe stato inviato via SMS allo stesso terminale su cui avevi eseguito firebase emulators:start
. Inserisci questo codice nell'app per simulare il controllo degli utenti nei messaggi di testo.
Test non interattivi
Per i test di autenticazione telefonica non interattivi, utilizza l'API REST dell'emulatore Authentication per recuperare i codici SMS disponibili. Tieni presente che il codice è diverso ogni volta che avvii il flusso.
La sequenza tipica è la seguente.
- Chiama il binario
signInWithPhoneNumber
per avviare la procedura di verifica. - Recupera il codice di verifica utilizzando l'endpoint REST specifico dell'emulatore.
- Chiama il numero
confirmationResult.confirm(code)
come di consueto con il codice di verifica.
Autenticazione a più fattori con SMS
L'emulatore Authentication 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 l'autenticazione MFA e configurare uno o più numeri di telefono a cui verranno inviati gli SMS a due fattori. I messaggi vengono visualizzati nello stesso terminale in cui hai eseguito firebase emulators:start
e sono disponibili dall'interfaccia REST.
Autenticazione del 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 l'autenticazione in due modi:
- L'app consente all'SDK di gestire l'intero processo end-to-end, incluse tutte le interazioni con i fornitori di IdP di terze parti per recuperare le credenziali.
- L'app recupera manualmente le credenziali da un fornitore di terze parti utilizzando l'SDK di terze parti e le passa all'SDK Authentication.
Anche in questo caso, controlla il link alla documentazione qui sopra e assicurati di conoscere bene il flusso che vuoi utilizzare (gestito dall'SDK Firebase o recupero manuale delle credenziali). L'emulatore Authentication supporta il 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'emulatore Authentication
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 mobile, visualizzate dalla libreria webview della tua piattaforma.
L'emulatore crea account utente e credenziali di terze parti simulati in base alle esigenze man mano che i flussi procedono.
Test dei flussi di IdP con il recupero manuale delle credenziali
Se usi tecniche di accesso "manuale" e chiami il metodo signInWithCredentials
della tua piattaforma, come di consueto, la tua app richiederà l'accesso di terze parti reali e
recupera 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 esempio quelli forniti da Facebook o Twitter, che non sono JWT) non sono supportati. La prossima sezione illustra un'alternativa in questi casi.
Test non interattivi
Un approccio ai test non interattivi è automatizzare i clic dell'utente sulla pagina di accesso gestita 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 in modo da utilizzare signInWithCredential
(ad es. in un ramo di codice) e utilizzare un flusso di autenticazione dei token con token ID fittizi per gli account anziché credenziali reali.
- Riscrivi o commenta la parte del tuo codice che recupera gli idToken dall'IdP; questo elimina la necessità di inserire nomi utente e password reali durante i test e riduce i test dalle quote API e dai limiti di frequenza presso l'IdP.
- Quindi, 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 consente di autenticare un utente
con l'email foo@example.com
di Google. Pensa al campo secondario come a una chiave primaria,
che può essere modificata in qualsiasi stringa, simulando l'accesso di diversi utenti. Puoi sostituire firebase.auth.GoogleAuthProvider
con, ad esempio,new firebase.auth.OAuthProvider('yahoo.com')
o qualsiasi altro ID fornitore che vuoi simulare.
Autenticazione token personalizzato emulato
L'emulatore Authentication gestisce l'autenticazione con token web JSON personalizzati utilizzando chiamate al metodo signInWithCustomToken
sulle piattaforme supportate, come descritto nella documentazione di Authentication di produzione.
Differenze tra l'emulatore Authentication e la produzione
L'emulatore Authentication Firebase simula molte funzionalità del prodotto di produzione. Tuttavia, poiché qualsiasi tipo di sistema di autenticazione si basa molto sulla sicurezza a più livelli (dispositivi, 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 relativo a IAM per l'esecuzione. Gli emulatori seguono le regole di sicurezza Firebase fornite, ma nelle situazioni in cui viene normalmente utilizzato IAM, 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 sul computer di sviluppo, in modo simile all'esecuzione diretta di uno script locale.
Accesso tramite link via email su dispositivo mobile
Poiché sulle piattaforme mobile l'accesso tramite link via email si basa su Firebase Dynamic Links, tutti questi link verranno aperti sulla piattaforma web (mobile).
Accesso di terze parti
Per i flussi di accesso di terze parti, Firebase Authentication si basa su credenziali sicure di fornitori di terze parti come Twitter e GitHub.
Le credenziali reali di provider OpenID Connect come Google e Apple vengono accettate dall'emulatore Authentication. Le credenziali di provider non OpenID Connect non sono supportate.
Accesso via email / SMS
Nelle app di produzione, i flussi di accesso via 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'emulatore Authentication non invia email o SMS ma, come descritto sopra, genera codici di accesso e li invia al terminale per utilizzarli per i test.
L'emulatore non supporta la possibilità di definire numeri di telefono di prova con codici di accesso corretti, che è possibile effettuare utilizzando la console Firebase.
Autenticazione token personalizzata
L'emulatore Authentication non convalida la firma o la scadenza dei token personalizzati. In questo modo puoi usare token realizzati a mano e riutilizzarli sempre negli scenari di test e prototipazione.
Limitazione di frequenza/anti-abuso
L'emulatore Authentication non replica le funzionalità di limitazione della frequenza di produzione o anti-abuso.
Funzioni di blocco
In produzione, gli utenti vengono scritti nello spazio di archiviazione una volta attivati entrambi gli eventi beforeCreate
e beforeSignIn
. Tuttavia, a causa di limitazioni tecniche, l'emulatore Authentication scrive per l'archiviazione 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'emulatore Authentication, ma si verificherà un errore in fase di produzione.
Che cosa succede ora?
Per una raccolta selezionata di video ed esempi dettagliati di istruzioni, segui la playlist di formazione sugli emulatori Firebase.
Poiché le funzioni attivate sono un'integrazione tipica con Authentication, scopri di più sull'emulatore Cloud Functions for Firebase in Eseguire le funzioni in locale.