Conecte su aplicación al emulador de autenticación

Antes de usar el emulador de autenticación con su aplicación, asegúrese de comprender el flujo de trabajo general de Firebase Local Emulator Suite y de instalar y configurar Local Emulator Suite y revisar sus comandos CLI .

¿Qué puedo hacer con el emulador de autenticación?

El emulador de autenticación proporciona una emulación local de alta fidelidad de los servicios de autenticación de Firebase, lo que proporciona gran parte de la funcionalidad que se encuentra en la autenticación de Firebase de producción . Junto con las plataformas Apple, Android y Web Firebase SDK, el emulador le permite:

  • Cree, actualice y administre cuentas de usuario emuladas para probar correo electrónico/contraseña, número de teléfono/SMS e iniciar sesión con proveedores de identidad de terceros (como Google)
  • Ver y editar usuarios emulados
  • Verifique los mensajes relacionados con la autenticación en la pestaña Registros de la interfaz de usuario del emulador.

Elija un proyecto de Firebase

Firebase Local Emulator Suite emula productos para un solo proyecto de Firebase.

Para seleccionar el proyecto a usar, antes de iniciar los emuladores, en la CLI, ejecute firebase use en su directorio de trabajo. O bien, puede pasar el indicador --project a cada comando del emulador.

Local Emulator Suite admite la emulación de proyectos reales de Firebase y proyectos de demostración .

Tipo de proyecto Características Usar con emuladores
Verdadero

Un proyecto real de Firebase es uno que usted creó y configuró (probablemente a través de la consola de Firebase).

Los proyectos reales tienen recursos activos, como instancias de base de datos, depósitos de almacenamiento, funciones o cualquier otro recurso que configure para ese proyecto de Firebase.

Cuando trabaje con proyectos reales de Firebase, puede ejecutar emuladores para cualquiera o todos los productos admitidos.

Para cualquier producto que no esté emulando, sus aplicaciones y código interactuarán con el recurso en vivo (instancia de base de datos, depósito de almacenamiento, función, etc.).

Manifestación

Un proyecto de demostración de Firebase no tiene una configuración real de Firebase ni recursos activos. Por lo general, se accede a estos proyectos a través de codelabs u otros tutoriales.

Los ID de proyecto para proyectos de demostración tienen el prefijo demo- .

Al trabajar con proyectos de demostración de Firebase, sus aplicaciones y código interactúan solo con emuladores . Si su aplicación intenta interactuar con un recurso para el que no se está ejecutando un emulador, ese código fallará.

Le recomendamos que utilice proyectos de demostración siempre que sea posible. Beneficios incluidos:

  • Configuración más sencilla, ya que puede ejecutar los emuladores sin tener que crear un proyecto de Firebase
  • Mayor seguridad, ya que si su código invoca accidentalmente recursos (de producción) no emulados, no hay posibilidad de cambio de datos, uso y facturación.
  • Mejor soporte sin conexión, ya que no es necesario acceder a Internet para descargar la configuración de su SDK.

Instrumente su aplicación para hablar con el emulador de autenticación

Android, iOS y SDK web

Configure su configuración en la aplicación o clases de prueba para interactuar con el emulador de autenticación de la siguiente manera.

Androide
FirebaseAuth.getInstance().useEmulator('10.0.2.2', 9099);
Rápido
Auth.auth().useEmulator(withHost:"localhost", port:9099)

Web versión 9

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

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

Web versión 8

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

No se necesita configuración adicional para crear prototipos y probar las interacciones entre la autenticación y las funciones en la nube o las reglas de seguridad de Firebase para Cloud Firestore o Realtime Database. Cuando el emulador de autenticación está configurado y se están ejecutando otros emuladores, funcionan juntos automáticamente.

SDK de administrador

El SDK de Firebase Admin se conecta automáticamente al emulador de autenticación cuando se establece la variable de entorno FIREBASE_AUTH_EMULATOR_HOST .

export FIREBASE_AUTH_EMULATOR_HOST="localhost:9099"

Tenga en cuenta que el emulador de Cloud Functions reconoce automáticamente el emulador de autenticación, por lo que puede omitir este paso cuando pruebe las integraciones entre Cloud Functions y los emuladores de autenticación. La variable de entorno se configurará automáticamente para Admin SDK en Cloud Functions.

Con la variable de entorno configurada, los SDK de administración de Firebase aceptarán tokens de ID sin firmar y cookies de sesión emitidas por el emulador de autenticación (a través de los métodos de createSessionCookie y verifyIdToken respectivamente) para facilitar el desarrollo y las pruebas locales. Asegúrese de no establecer la variable de entorno en producción.

Al conectarse al emulador de autenticación, deberá especificar un ID de proyecto. Puede pasar un ID de proyecto para initializeApp directamente o establecer la variable de entorno GCLOUD_PROJECT . Tenga en cuenta que no necesita usar su ID de proyecto de Firebase real; el emulador de autenticación aceptará cualquier ID de proyecto.

SDK de administración de Node.js
admin.initializeApp({ projectId: "your-project-id" });
Variable ambiental
export GCLOUD_PROJECT="your-project-id"

fichas de identificación

Por motivos de seguridad, el emulador de autenticación emite tokens de identificación sin firmar , que solo aceptan otros emuladores de Firebase o el SDK de Firebase Admin cuando está configurado . Estos tokens serán rechazados por los servicios de producción de Firebase o Firebase Admin SDK que se ejecutan en modo de producción (por ejemplo, el comportamiento predeterminado sin los pasos de configuración descritos anteriormente).

Para comenzar la creación de prototipos interactivos con el emulador de autenticación y la interfaz de usuario de Emulator Suite, inicie Firebase Local Emulator Suite.

firebase emulators:start

Para la autenticación anónima , su aplicación puede ejercer la lógica de inicio de sesión para su plataforma ( iOS , Android , web ).

Para la autenticación de correo electrónico/contraseña , puede comenzar a crear prototipos agregando cuentas de usuario al emulador de autenticación desde su aplicación usando los métodos del SDK de autenticación o usando la interfaz de usuario de Emulator Suite.

  1. En la interfaz de usuario de Emulator Suite, haga clic en la pestaña Autenticación .
  2. Haga clic en el botón Agregar usuario .
  3. Siga el asistente de creación de cuenta de usuario, completando los campos de autenticación de correo electrónico.

Con un usuario de prueba creado, su aplicación puede iniciar y cerrar la sesión del usuario con la lógica SDK para su plataforma ( iOS , Android , web ).

Para probar la verificación/inicio de sesión de correo electrónico con flujos de enlace de correo electrónico, el emulador imprime una URL en el terminal en el que se 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

Pegue el enlace en su navegador para simular el evento de verificación y verifique si la verificación tuvo éxito.

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

Para probar los restablecimientos de contraseña, el emulador imprime una URL similar, incluido un parámetro newPassword (que puede cambiar según sea necesario), en el terminal.

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

Pruebas no interactivas

En lugar de usar la interfaz de usuario de Emulator Suite o el código de cliente para administrar las cuentas de usuario de correo electrónico/contraseña, puede escribir scripts de configuración de prueba que llamen a las API REST para crear y eliminar cuentas de usuario y obtener códigos de verificación de correo electrónico fuera de banda para completar la verificación de correo electrónico del emulador. URL Esto mantiene la plataforma y el código de prueba separados y le permite probar de forma no interactiva.

Para flujos de prueba de contraseña y correo electrónico no interactivos, la secuencia típica es la siguiente.

  1. Cree usuarios con el extremo REST de registro de autenticación.
  2. Iniciar sesión usuarios utilizando los correos electrónicos y contraseñas para realizar pruebas.
  3. Si corresponde a sus pruebas, obtenga los códigos de verificación de correo electrónico fuera de banda disponibles del endpont REST específico del emulador .
  4. Vacíe los registros de usuario con el extremo REST específico del emulador para borrar datos.

Autenticación emulada de teléfono/SMS

Para la autenticación telefónica, el emulador Auth no admite:

  • flujos reCAPTCHA y APN. Una vez configurados para interactuar con el emulador, los SDK del cliente desactivan estos métodos de verificación de forma similar a la descrita para las pruebas de integración ( iOS , Android , web ).
  • Prueba los números de teléfono con códigos preconfigurados en Firebase console.

Por lo demás, en términos de código de cliente, el flujo de autenticación por teléfono/SMS es idéntico al descrito para producción ( iOS , Android , web ).

Usando la interfaz de usuario de Emulator Suite:

  1. En la interfaz de usuario de Emulator Suite, haga clic en la pestaña Autenticación .
  2. Haga clic en el botón Agregar usuario .
  3. Siga el asistente de creación de cuenta de usuario, completando los campos de autenticación del teléfono.

Sin embargo, para los flujos de autenticación telefónica, el emulador NO activará la entrega de ningún mensaje de texto, ya que ponerse en contacto con un operador está fuera del alcance y no es amigable para las pruebas locales. En su lugar, el emulador imprime el código que se habría enviado por SMS al mismo terminal en el que ejecutó firebase emulators:start ; ingrese este código en la aplicación para simular que los usuarios revisan sus mensajes de texto.

Pruebas no interactivas

Para las pruebas de autenticación telefónica no interactiva, utilice la API REST del emulador de autenticación para recuperar los códigos de SMS disponibles. Tenga en cuenta que el código es diferente cada vez que inicia el flujo.

La secuencia típica es la siguiente.

  1. Llame a la plataforma signInWithPhoneNumber para iniciar el proceso de verificación.
  2. Recupere el código de verificación mediante el extremo REST específico del emulador .
  3. Llame a confirmationResult.confirm(code) como de costumbre con el código de verificación.

Autenticación de proveedores de identidad (IDP) de terceros emulados

El emulador de autenticación le permite probar muchos flujos de autenticación de terceros en su iOS, Android o aplicaciones web sin cambios en el código de producción. Para ver ejemplos de flujos de autenticación, consulte la documentación de varias combinaciones de proveedores y plataformas que puede usar en su aplicación .

En términos generales, puede usar el SDK de Firebase para autenticarse de una de estas dos maneras:

  • Su aplicación permite que el SDK maneje todo el proceso de principio a fin, incluidas todas las interacciones con proveedores de IDP de terceros para recuperar las credenciales.
  • Su aplicación recupera manualmente las credenciales de un proveedor externo mediante el SDK de esa parte y pasa esas credenciales al SDK de autenticación.

Una vez más, consulte el enlace de documentación anterior y asegúrese de que está familiarizado con el flujo (gestión del SDK de Firebase o recuperación manual de credenciales) que desee utilizar. El emulador de autenticación admite la prueba de cualquier enfoque.

Prueba de flujos de IDP basados ​​en el SDK de Firebase

Si su aplicación usa cualquier flujo de extremo a extremo del SDK de Firebase, como OAuthProvider para iniciar sesión con Microsoft, GitHub o Yahoo, para pruebas interactivas, el emulador de autenticación sirve una versión local de la página de inicio de sesión correspondiente para ayudarlo a probar autenticación de aplicaciones web que llaman al método signinWithPopup o signInWithRedirect . Esta página de inicio de sesión servida localmente también aparece en aplicaciones móviles, representada por la biblioteca webview de su plataforma.

El emulador crea credenciales y cuentas de usuario de terceros simuladas según sea necesario a medida que avanzan los flujos.

Prueba de flujos de IDP con recuperación manual de credenciales

Si usa técnicas de inicio de sesión "manual" y llama al método signInWithCredentials de su plataforma, entonces, como de costumbre, su aplicación solicitará el inicio de sesión de un tercero real y recuperará las credenciales de terceros reales.

Tenga en cuenta que el emulador solo admite la autenticación signInWithCredential para las credenciales obtenidas de Google Sign-In, Apple y otros proveedores que usan tokens de ID implementados como JSON Web Tokens (JWT). Los tokens de acceso (p. ej., los proporcionados por Facebook o Twitter, que no son JWT) no son compatibles. En la siguiente sección se analiza una alternativa en estos casos.

Pruebas no interactivas

Un enfoque para las pruebas no interactivas es automatizar los clics de los usuarios en la página de inicio de sesión proporcionada por el emulador. Para aplicaciones web, use una interfaz de control como WebDriver. Para dispositivos móviles, use las herramientas de prueba de IU de su plataforma, como Espresso o Xcode.

Alternativamente, puede actualizar su código para usar signInWithCredential (por ejemplo, en una rama de código) y usar un flujo de autenticación de token con tokens de identificación simulados para cuentas en lugar de credenciales reales.

  1. Vuelva a cablear o comente la parte de su código que recupera idTokens del IDP; esto elimina la necesidad de ingresar nombres de usuario y contraseñas reales durante sus pruebas, y las libera de las cuotas de API y los límites de velocidad en el IDP.
  2. En segundo lugar, use una cadena JSON literal en lugar del token para signInWithCredential . Usando el SDK web como ejemplo, puede cambiar el código a:
firebase.auth().signInWithCredential(firebase.auth.GoogleAuthProvider.credential(
  '{"sub": "abc123", "email": "foo@example.com", "email_verified": true}'
));

Cuando se usa con el emulador, este código autenticará con éxito a un usuario con el correo electrónico foo@example.com en Google. Piense en el subcampo como una clave principal, que se puede cambiar a cualquier cadena, simulando el inicio de sesión de diferentes usuarios. Puede reemplazar firebase.auth.GoogleAuthProvider con, por ejemplo, new firebase.auth.OAuthProvider('yahoo.com') o cualquier otra ID de proveedor que desee simular.

En qué se diferencia el emulador de autenticación de la producción

El emulador de Firebase Authentication simula muchas características del producto de producción. Sin embargo, dado que cualquier tipo de sistema de autenticación depende en gran medida de la seguridad en varios niveles (dispositivo, proveedores externos, Firebase, etc.), es difícil para el emulador recrear correctamente todos los flujos.

IAM en la nube

Firebase Emulator Suite no intenta replicar ni respetar ningún comportamiento relacionado con IAM para ejecutarse. Los emuladores se adhieren a las reglas de seguridad de Firebase proporcionadas, pero en situaciones en las que normalmente se usaría IAM, por ejemplo, para configurar la cuenta de servicio de invocación de Cloud Functions y, por lo tanto, los permisos, el emulador no es configurable y utilizará la cuenta disponible globalmente en su máquina de desarrollador. similar a ejecutar un script local directamente.

Dado que en las plataformas móviles, el inicio de sesión con enlace de correo electrónico se basa en Firebase Dynamic Links, todos esos enlaces se abrirán en la plataforma web (móvil).

Inicio de sesión de terceros

Para los flujos de inicio de sesión de terceros, Firebase Authentication se basa en credenciales seguras de proveedores externos como Twitter y Github.

El emulador de autenticación acepta las credenciales reales de los proveedores de OpenID Connect, como Google y Apple. No se admiten las credenciales de proveedores que no sean de OpenID Connect.

Inicio de sesión por correo electrónico/SMS

En las aplicaciones de producción, los flujos de inicio de sesión de correo electrónico y SMS implican una operación asíncrona en la que el usuario comprueba un mensaje recibido e introduce un código de inicio de sesión en una interfaz de inicio de sesión. El emulador de autenticación no envía correos electrónicos ni mensajes SMS, pero, como se describió anteriormente , genera códigos de inicio de sesión y los envía al terminal para usarlos en las pruebas.

El emulador no admite la capacidad de definir números de teléfono de prueba con códigos de inicio de sesión fijos, como se puede hacer con la consola Firebase.

Limitación de velocidad / anti-abuso

El emulador de autenticación no replica la limitación de la tasa de producción o las funciones anti-abuso.

¿Qué sigue?