Catch up on everthing we announced at this year's Firebase Summit. Learn more

Conecte su aplicación al emulador de autenticación

Antes de usar el emulador de autenticación con ustedes aplicación, asegúrese de que entiende el flujo de trabajo general Firebase local emulador suite , y que instalar y configurar el emulador suite local y revisar sus comandos de la CLI .

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

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

  • Cree, actualice y administre cuentas de usuario emuladas para probar el correo electrónico / contraseña, el 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 para su uso, antes de empezar los emuladores, en el plazo de CLI firebase use en su directorio de trabajo. O bien, puede pasar el --project bandera para cada comando emulador.

Local emulador Suite es compatible con la emulación de los proyectos de demostración base de fuego reales y proyectos.

Tipo de proyecto Características Usar con emuladores
Verdadero

Un proyecto de Firebase real es uno que creaste y configuraste (probablemente a través de la consola de Firebase).

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

Al trabajar con proyectos reales de Firebase, puede ejecutar emuladores para cualquiera o todos los productos compatibles.

Para cualquier producto que no está emulando, sus aplicaciones y código interactuarán con el recurso directo (instancia de base de datos, un cubo de almacenamiento, función, etc.).

Manifestación

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

Proyecto ID para proyectos de demostración tienen la demo- prefijo.

Cuando se trabaja con proyectos de demostración de base de fuego, sus aplicaciones e interactuar código con sólo 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 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);
Rápido
Auth.auth().useEmulator(withHost:"localhost", port:9099)

Versión web 9

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

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

Versión web 8

const auth = firebase.auth();
auth.useEmulator("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 del administrador Firebase conecta automáticamente con el emulador de autenticación cuando el FIREBASE_AUTH_EMULATOR_HOST se establece la variable de entorno.

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 set, Firebase de administración SDK aceptará sin signo galletas ID Tokens y de sesión emitidos por el emulador de autenticación (vía verifyIdToken y createSessionCookie métodos respectivamente) para facilitar developmemt y pruebas local. Por favor asegúrese de no establecer la variable de entorno de producción.

Cuando se conecte al emulador de autenticación, deberá especificar un ID de proyecto. Se puede pasar un identificador de proyecto para initializeApp directa o establecer el GCLOUD_PROJECT variable de entorno. 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"

Tokens de identificación

Por razones de seguridad, la autenticación emulador cuestiones fichas de identificación sin firmar, que sólo son aceptados por otros emuladores base de fuego, o el SDK del administrador Firebase cuando 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 el inicio de sesión en la lógica de su plataforma ( iOS , Android , Web ).

Para la autenticación de correo electrónico / contraseña, puede iniciar la creación de prototipos mediante la adición de cuentas de usuario en el emulador de autenticación de su aplicación utilizando métodos de autenticación SDK, o utilizando el emulador Suite de interfaz de usuario.

  1. En el emulador Suite de interfaz de usuario, haga clic en la ficha Autenticación.
  2. Haga clic en el botón Añadir 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 firmar el usuario dentro y fuera de la lógica del SDK para su plataforma ( iOS , Android , Web ).

Para la prueba de verificación de correo electrónico / inicio de sesión con flujos de enlace de correo electrónico, el emulador imprime una dirección URL a la terminal en la que firebase emulators:start fue ejecutado.

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 la prueba de restablecimiento de contraseñas, el emulador imprime una URL similar, incluyendo un parámetro newpassword (que puede cambiar según sea necesario), a la 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 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 los flujos de prueba de contraseña y correo electrónico no interactivos, la secuencia típica es la siguiente.

  1. Crear usuarios con la autenticación de punto final Registrar RESTO .
  2. Inicie sesión a los usuarios utilizando los correos electrónicos y las contraseñas para realizar las pruebas.
  3. Si es aplicable a sus pruebas, ir a buscar los códigos de verificación de correo electrónico fuera de banda disponibles de la endpont RESTO emulador específico .
  4. Registros de usuario a ras con el extremo REST emulador específica para los datos de compensación.

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 configurado para interactuar con el emulador, SDK cliente desactivar 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éntica a la descrita para la producción ( iOS , Android , Web ).

Usando la interfaz de usuario de Emulator Suite:

  1. En el emulador Suite de interfaz de usuario, haga clic en la ficha Autenticación.
  2. Haga clic en el botón Añadir 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 su lugar, se imprime el emulador fuera del código que habría sido enviado por SMS al mismo terminal al que se ha ejecutado 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. Recuperar el código de verificación mediante el extremo REST-emulador específico .
  3. Llamada 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 ejemplos de flujos de autenticación, consulte la documentación de diversas combinaciones de proveedores y plataformas se pueden 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 usando 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 utiliza cualquier Firebase SDK de extremo a extremo de flujo, como OAuthProvider de inicio de sesión con Microsoft, GitHub, o Yahoo, para la prueba interactiva, el emulador de autenticación sirve una versión local de la página de registro correspondiente para ayudarle a probar la autenticación de aplicaciones web que llaman a la signinWithPopup o signInWithRedirect método. 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 el inicio de sesión en el "manual" y técnicas de la llamada de su plataforma signInWithCredentials método, entonces, como de costumbre, su aplicación va a solicitar verdadero inicio de sesión de terceros y recuperar las credenciales reales de terceros.

Tenga en cuenta que el emulador sólo admite signInWithCredential autenticación de credenciales recuperados de acceso de Google, Apple y otros proveedores que el uso de fichas de identificación implementado como JSON Web Tokens (JWTs). 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.

Como alternativa, puede actualizar el código para utilizar signInWithCredential (por ejemplo, en una rama de código) y utilizar un flujo de autenticación de señales con fichas de identificación falsos para las 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, utilice 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 a un usuario satisfactoriamente 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, new firebase.auth.OAuthProvider('yahoo.com') o cualquier otra identificación del proveedor que desea burlarse.

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

El emulador de Firebase Authentication simula muchas funciones 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 de terceros, Firebase, etc.), es difícil para el emulador recrear correctamente todos los flujos.

Cloud IAM

Firebase Emulator Suite no intenta replicar ni respetar ningún comportamiento de ejecución relacionado con IAM. 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 Cloud Functions invocando la cuenta de servicio y, por lo tanto, los permisos, el emulador no es configurable y usará 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 del enlace de correo electrónico se basa en Firebase Dynamic Links, todos estos 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 credenciales reales de 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 por correo electrónico y SMS implican una operación asincrónica en la que el usuario verifica un mensaje recibido e ingresa 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 o mensajes SMS, pero como se ha descrito anteriormente , sí genera códigos de acceso y salida de ellos, a la terminal para ser utilizado en la prueba.

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 de Firebase.

Tasa de limitación / anti-abuso

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

¿Qué sigue?