Descubre las novedades de Firebase en Google I/O 2022. Más información

Comience con la autenticación de Firebase en Flutter

Organiza tus páginas con colecciones Guarda y categoriza el contenido según tus preferencias.

Conecta tu aplicación a Firebase

Instale e inicialice los SDK de Firebase para Flutter si aún no lo ha hecho.

Agrega Firebase Authentication a tu aplicación

  1. Desde la raíz de su proyecto Flutter, ejecute el siguiente comando para instalar el complemento:

    flutter pub add firebase_auth
    
  2. Una vez completada, reconstruya su aplicación Flutter:

    flutter run
    
  3. Importe el complemento en su código Dart:

    import 'package:firebase_auth/firebase_auth.dart';
    

Para usar un proveedor de autenticación, debe habilitarlo en Firebase console . Vaya a la página Método de inicio de sesión en la sección Autenticación de Firebase para habilitar el inicio de sesión con correo electrónico/contraseña y cualquier otro proveedor de identidad que desee para su aplicación.

(Opcional) Realice prototipos y pruebas con Firebase Local Emulator Suite

Antes de hablar sobre cómo su aplicación autentica a los usuarios, presentemos un conjunto de herramientas que puede usar para crear prototipos y probar la funcionalidad de autenticación: Firebase Local Emulator Suite. Si está decidiendo entre técnicas de autenticación y proveedores, probando diferentes modelos de datos con datos públicos y privados mediante las reglas de seguridad de autenticación y Firebase, o creando prototipos de diseños de interfaz de usuario de inicio de sesión, poder trabajar localmente sin implementar servicios en vivo puede ser una gran idea. .

Un emulador de autenticación es parte de Local Emulator Suite, que permite que su aplicación interactúe con el contenido y la configuración de la base de datos emulada, así como, opcionalmente, con los recursos de su proyecto emulado (funciones, otras bases de datos y reglas de seguridad).

El uso del emulador de autenticación implica solo unos pocos pasos:

  1. Agregar una línea de código a la configuración de prueba de su aplicación para conectarse al emulador.

  2. Desde la raíz del directorio de tu proyecto local, ejecuta firebase emulators:start .

  3. Uso de la interfaz de usuario de Local Emulator Suite para la creación de prototipos interactivos, o la API REST del emulador de autenticación para pruebas no interactivas.

  4. Llame a useAuthEmulator() para especificar la dirección y el puerto del emulador:

    Future<void> main() async {
    WidgetsFlutterBinding.ensureInitialized();
    await Firebase.initializeApp();
    
    // Ideal time to initialize
    await FirebaseAuth.instance.useAuthEmulator('localhost', 9099);
    //...
    }
    

Una guía detallada está disponible en Conecte su aplicación al emulador de autenticación . Para obtener más información, consulte la introducción de Local Emulator Suite .

Ahora continuemos con cómo autenticar a los usuarios.

Comprobar el estado de autenticación actual

Firebase Auth proporciona muchos métodos y utilidades para permitirle integrar la autenticación segura en su aplicación Flutter nueva o existente. En muchos casos, necesitará conocer el estado de autenticación de su usuario, por ejemplo, si está conectado o desconectado.

Firebase Auth le permite suscribirse en tiempo real a este estado a través de Stream . Una vez llamado, el flujo proporciona un evento inmediato del estado de autenticación actual del usuario y luego proporciona eventos posteriores cada vez que cambia el estado de autenticación.

Hay tres métodos para escuchar los cambios de estado de autenticación:

authStateChanges()

Para suscribirte a estos cambios, llama al método authStateChanges() en tu instancia de FirebaseAuth :

FirebaseAuth.instance
  .authStateChanges()
  .listen((User? user) {
    if (user == null) {
      print('User is currently signed out!');
    } else {
      print('User is signed in!');
    }
  });

Los eventos se disparan cuando ocurre lo siguiente:

  • Inmediatamente después de que el oyente se haya registrado.
  • Cuando un usuario inicia sesión.
  • Cuando el usuario actual cierra la sesión.

idTokenChanges()

Para suscribirte a estos cambios, llama al método idTokenChanges() en tu instancia de FirebaseAuth :

FirebaseAuth.instance
  .idTokenChanges()
  .listen((User? user) {
    if (user == null) {
      print('User is currently signed out!');
    } else {
      print('User is signed in!');
    }
  });

Los eventos se disparan cuando ocurre lo siguiente:

  • Inmediatamente después de que el oyente se haya registrado.
  • Cuando un usuario inicia sesión.
  • Cuando el usuario actual cierra la sesión.
  • Cuando hay un cambio en el token del usuario actual.

userChanges()

Para suscribirte a estos cambios, llama al método userChanges() en tu instancia de FirebaseAuth :

FirebaseAuth.instance
  .userChanges()
  .listen((User? user) {
    if (user == null) {
      print('User is currently signed out!');
    } else {
      print('User is signed in!');
    }
  });

Los eventos se disparan cuando ocurre lo siguiente:

  • Inmediatamente después de que el oyente se haya registrado.
  • Cuando un usuario inicia sesión.
  • Cuando el usuario actual cierra la sesión.
  • Cuando hay un cambio en el token del usuario actual.
  • Cuando se llama a los siguientes métodos proporcionados por FirebaseAuth.instance.currentUser :
    • reload()
    • unlink()
    • updateEmail()
    • updatePassword()
    • updatePhoneNumber()
    • updateProfile()

Estado de autenticación persistente

Los SDK de Firebase para todas las plataformas brindan soporte inmediato para garantizar que el estado de autenticación de su usuario se mantenga al reiniciar la aplicación o recargar la página.

En plataformas nativas como Android e iOS, este comportamiento no es configurable y el estado de autenticación del usuario permanecerá en el dispositivo entre reinicios de la aplicación. El usuario puede borrar los datos almacenados en caché de las aplicaciones mediante la configuración del dispositivo, lo que borrará cualquier estado existente que se esté almacenando.

En las plataformas web, el estado de autenticación del usuario se almacena en IndexedDB . Puede cambiar la persistencia para almacenar datos en el almacenamiento local usando Persistence.LOCAL . Si es necesario, puede cambiar este comportamiento predeterminado para que solo persista el estado de autenticación para la sesión actual, o no lo haga en absoluto. Para configurar estos ajustes, llama al siguiente método FirebaseAuth.instanceFor(app: Firebase.app(), persistence: Persistence.LOCAL); . Todavía puede actualizar la persistencia para cada instancia de Auth usando setPersistence(Persistence.NONE) .

// Disable persistence on web platforms. Must be called on initialization:
final auth = FirebaseAuth.instanceFor(app: Firebase.app(), persistence: Persistence.NONE);
// To change it after initialization, use `setPersistence()`:
await auth.setPersistence(Persistence.LOCAL);

Próximos pasos

Explore las guías sobre el inicio de sesión y el registro de usuarios con los servicios de identidad y autenticación admitidos.