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
Desde la raíz de su proyecto Flutter, ejecute el siguiente comando para instalar el complemento:
flutter pub add firebase_auth
Una vez completado, reconstruya su aplicación Flutter:
flutter run
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:
Agregar una línea de código a la configuración de prueba de su aplicación para conectarse al emulador.
Desde la raíz del directorio de su proyecto local, ejecute
firebase emulators:start
.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.
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.
- Un usuario inicia sesión o se vuelve a autenticar después de modificar las reclamaciones personalizadas. El token de identificación emitido como resultado contendrá las últimas reclamaciones.
- Una sesión de usuario existente actualiza su token de ID después de que caduque un token más antiguo.
- Se fuerza la actualización de un token de ID llamando a
FirebaseAuth.instance.currentUser.getIdTokenResult(true)
.
Para obtener más detalles, consulte Propagar reclamos personalizados al cliente.
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()
-
idTokenChanges()
, userChanges()
y authStateChanges()
tampoco se activarán si deshabilitas o eliminas al User
con el SDK de Firebase Admin o Firebase console. Tendrás que forzar una recarga usando FirebaseAuth.instance.currentUser.reload()
, lo que provocará una excepción user-disabled
o user-not-found
que puedes detectar y manejar en el código de tu aplicación.
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.