Comience con la autenticación de Firebase en Flutter

Conecte su aplicación a Firebase

Instala e inicializa los SDK de Firebase para Flutter si aún no lo has hecho.

Agregue autenticación de Firebase a su 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 completado, reconstruya su aplicación Flutter:

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

    import 'package:firebase_auth/firebase_auth.dart';
    

Para utilizar 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 por correo electrónico/contraseña y cualquier otro proveedor de identidad que desee para su aplicación.

(Opcional) Prototipo y prueba 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 utilizar para crear prototipos y probar la funcionalidad de autenticación: Firebase Local Emulator Suite. Si está decidiendo entre proveedores y técnicas de autenticación, probando diferentes modelos de datos con datos públicos y privados usando autenticación y reglas de seguridad de 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 del proyecto emulado (funciones, otras bases de datos y reglas de seguridad).

Usar el 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 su proyecto local, ejecute firebase emulators:start .

  3. Usar 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);
    //...
    }
    

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

Ahora continuemos con cómo autenticar usuarios.

Verificar el estado de autenticación actual

Firebase Auth proporciona muchos métodos y utilidades que le permiten 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 ha iniciado o cerrado sesión.

Firebase Auth le permite suscribirse en tiempo real a este estado a través de un Stream . Una vez llamada, la transmisión 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.

Existen 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 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 activan cuando ocurre lo siguiente:

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

idTokenChanges()

Para suscribirte a estos cambios, llama al método idTokenChanges() en tu instancia 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 activan cuando ocurre lo siguiente:

  • Inmediatamente después de que el oyente haya sido registrado.
  • Cuando un usuario inicia sesión.
  • Cuando el usuario actual cierra 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 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 activan cuando ocurre lo siguiente:

  • Inmediatamente después de que el oyente haya sido registrado.
  • Cuando un usuario inicia sesión.
  • Cuando el usuario actual cierra sesión.
  • Cuando hay un cambio en el token del usuario actual.
  • Cuando se llaman 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 listo para usar para garantizar que el estado de autenticación de su usuario persista durante el reinicio de la aplicación o la recarga de la página.

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

En 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 para que no persista en absoluto. Para configurar estos ajustes, llame al siguiente método FirebaseAuth.instanceFor(app: Firebase.app(), persistence: Persistence.LOCAL); . Aún puedes actualizar la persistencia de cada instancia de autenticación 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 cómo iniciar sesión y registrar usuarios con los servicios de identidad y autenticación admitidos.