Google se compromete a impulsar la igualdad racial para las comunidades afrodescendientes. Obtén información al respecto.

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 los SDK de Firebase para iOS, Android y web, el emulador te permite:

  • Cree, actualice y administre cuentas de usuario emuladas para probar el 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 IU del emulador.

Elige 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 puede pasar la --project a cada comando del emulador.

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

Tipo de proyecto Características Usar con emuladores
Verdadero Un proyecto real es aquel que configuraste y activaste en la consola de Firebase; un proyecto real tiene recursos activos, como bases de datos, depósitos de almacenamiento, funciones o cualquier otro recurso que configure para ese proyecto. Al trabajar con proyectos reales, puede ejecutar emuladores para cualquiera o todos los productos admitidos en su proyecto.

Para cualquier producto que no esté emulando, sus aplicaciones y código interactuarán con la base de datos en vivo , el depósito de almacenamiento, la función, etc.
Manifestación Un proyecto de demostración no tiene configuración de consola de Firebase ni recursos activos.

Los ID de proyectos de demostración tienen el prefijo demo- .
Cuando trabaja con proyectos de demostración, sus aplicaciones y código interactúan solo con emuladores. Si su aplicación interactúa 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 no emulados (producción), 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.

Instrumenta tu aplicación para que hable con el emulador de autenticación

SDK de Android, iOS y 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);
iOS: Swift
Auth.auth().useEmulator(withHost:"localhost", port:9099)

Web v8

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

Web v9

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

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

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

SDK de administrador

El SDK de Firebase Admin se conecta automáticamente al emulador de autenticación cuando se FIREBASE_AUTH_EMULATOR_HOST 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 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 Firebase Admin 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 verifyIdToken y createSessionCookie respectivamente) para facilitar el desarrollo y las pruebas locales. Asegúrese de no establecer la variable de entorno en producción.

Cuando se conecte 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 es necesario que utilice su ID de proyecto de Firebase real; el emulador de autenticación aceptará cualquier ID de proyecto.

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

Fichas de identificación

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

Para comenzar a crear prototipos interactivos con el emulador de autenticación y la IU 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 métodos de 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 cuentas de usuario y complete 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 del 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 se realizó correctamente.

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

Para probar el restablecimiento de contraseñas, el emulador imprime una URL similar, que incluye 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 cuentas de usuario de correo electrónico / contraseña, puede escribir scripts de configuración de prueba que llaman 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 los flujos de prueba de contraseña y correo electrónico no interactivos, la secuencia típica es la siguiente.

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

Autenticación emulada por teléfono / SMS

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

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

De lo contrario, en términos de código de cliente, el flujo de autenticación de 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 cuentas de usuario y complete los campos de autenticación del teléfono.

Sin embargo, para los flujos de autenticación del teléfono, 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 compatible con las pruebas locales. En cambio, el emulador imprime el código que se habría enviado por SMS al mismo terminal en el que ejecutó los firebase emulators:start ; ingrese este código en la aplicación para simular que los usuarios verifican sus mensajes de texto.

Pruebas no interactivas

Para pruebas de autenticación de teléfono no interactivas, use la API REST del emulador de autenticación para recuperar los códigos 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 utilizando el punto final REST específico del emulador .
  3. Llame confirmationResult.confirm(code) como de costumbre con el código de verificación.

Autenticación de proveedor de identidad de terceros (IDP) emulada

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

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

  • Su aplicación permite que el SDK maneje todo el proceso de un extremo a otro, incluidas todas las interacciones con proveedores de IDP externos para recuperar las credenciales.
  • Su aplicación recupera manualmente las credenciales de un proveedor externo utilizando 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 estar familiarizado con el flujo que desee utilizar: recuperación de credenciales administrada por SDK de Firebase frente a recuperación manual. El emulador de autenticación admite la prueba de cualquiera de los enfoques.

Prueba de los flujos de IDP impulsados ​​por el SDK de Firebase

Si su aplicación usa cualquier flujo de extremo a extremo del SDK de Firebase, como OAuthProvider para OAuthProvider sesión con Microsoft, GitHub o Yahoo, para pruebas interactivas, el emulador de autenticación ofrece una versión local de la página de inicio de sesión correspondiente para ayudarlo a realizar la prueba. autenticación desde 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 de vistas web 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 utiliza técnicas de inicio de sesión "manual" y llama al método signInWithCredentials su plataforma, entonces, como de costumbre, su aplicación solicitará un inicio de sesión real de terceros y recuperará credenciales reales de terceros.

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

Pruebas no interactivas

Un enfoque para las pruebas no interactivas es automatizar los clics del usuario 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 libera sus pruebas 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 utiliza con el emulador, este código autenticará correctamente 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, burlándose de la firma de diferentes usuarios. Puede reemplazar firebase.auth.GoogleAuthProvider con, por ejemplo, el new firebase.auth.OAuthProvider('yahoo.com') o cualquier otro ID de proveedor que desee simular.

¿Qué sigue?