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
Desde la raíz de su proyecto Flutter, ejecute el siguiente comando para instalar el complemento:
flutter pub add firebase_auth
Una vez completada, reconstruya su aplicación Flutter:
flutter run
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:
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 tu proyecto local, ejecuta
firebase emulators:start
.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.
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.
- Un usuario inicia sesión o vuelve a autenticarse después de modificar las notificaciones personalizadas. El token de identificación emitido como resultado contendrá los últimos reclamos.
- Una sesión de usuario existente actualiza su token de ID después de que caduca un token anterior.
- Un token de ID se actualiza a la fuerza llamando a
FirebaseAuth.instance.currentUser.getIdTokenResult(true)
.
Para obtener más detalles, consulte Propagación de notificaciones personalizadas al cliente
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()
-
idTokenChanges()
, userChanges()
y authStateChanges()
tampoco se activarán si deshabilita o elimina el User
con Firebase Admin SDK o Firebase console. Tendrá que forzar una recarga usando FirebaseAuth.instance.currentUser.reload()
, lo que provocará una excepción user-disabled
o user-not-found
que puede capturar y manejar en el código de su aplicación.
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.