Atlas App Services proporciona una API para autenticar usuarios mediante cualquier proveedor de autenticación habilitado. Cree una instancia de Credencialesy pasarlo a App.logIn() para autenticar y crear un objeto Usuario para ese usuario. Cada proveedor de autenticación corresponde a un método constructor estático utilizado para instanciar Credentials objetos para ese proveedor de autenticación.
Antes de comenzar
Habilite y configure uno o más proveedores de autenticación de App Services.
Registrar una nueva cuenta de usuario
Realm registra las cuentas de forma diferente según el proveedor de autenticación:
No es necesario registrar usuarios anónimos.
Para registrar un usuario de correo electrónico y contraseña, consulte Registro de usuario de correo electrónico y contraseña.
Si utiliza la autenticación de Google, Facebook, Apple o JWT personalizada, el registro lo gestionan estos servicios de terceros.
Inicia sesión
Puede autenticar usuarios con App.logIn().
Si tiene éxito, app.logIn devuelve un objeto User.
Usuario anónimo
El proveedor de autenticación anónima permite a los usuarios iniciar sesión en su aplicación con cuentas temporales que no almacenan información personal persistente. Para iniciar sesión con autenticación anónima, cree una credencial anónima llamando a Credentials.anonymous() y luego envíe la credencial generada app.logIn a.
final anonCredentials = Credentials.anonymous(); await app.logIn(anonCredentials);
Si desea más de un usuario anónimo, configure reuseCredentials: false al crear credenciales anónimas adicionales.
final anonUser = await app.logIn(Credentials.anonymous()); final otherAnonUser = await app.logIn(Credentials.anonymous(reuseCredentials: false));
Correo electrónico/Contraseña Usuario
El proveedor de autenticación de correo electrónico/contraseña permite a los usuarios iniciar sesión en su aplicación con un nombre de usuario y una contraseña. Para iniciar sesión con autenticación de correo electrónico/contraseña, cree una credencial de correo electrónico/contraseña llamando a Credentials.emailPassword() con el correo electrónico y la contraseña del usuario. Luego, envíe la credencial app.logIn a.
final emailPwCredentials = Credentials.emailPassword("lisa@example.com", "myStr0ngPassw0rd"); await app.logIn(emailPwCredentials);
Para obtener más información sobre el flujo completo del uso de la autenticación de correo electrónico y contraseña de App Services, consulte Usuarios de correo electrónico y contraseña.
Usuario JWT personalizado
Si ha configurado el proveedor de autenticación JWT personalizado, puede iniciar sesión utilizando las credenciales JWT de un proveedor de autenticación externo.
Para iniciar sesión con autenticación JWT personalizada, cree una credencial JWT llamando a Credentials.jwt() en una cadena JWT. Luego, pase la credencial app.logIn a.
final token = await authenticateWithExternalSystem(); final jwtCredentials = Credentials.jwt(token); final currentUser = await app.logIn(jwtCredentials);
Usuario de clave API
Si ha habilitado la autenticación de clave API, puede iniciar sesión usando una clave API de cliente o de servidor.
Para iniciar sesión con autenticación de clave API, cree una credencial ApiKey llamando a Credentials.apiKey() en una cadena de clave API. Luego, pase la credencial app.logIn() a.
final apiKeyCredentials = Credentials.apiKey(myApiKey); final apiKeyUser = await app.logIn(apiKeyCredentials);
Para generar una clave API de servidor para usar en sus credenciales, consulte la documentación Crear una clave API de servidor.
Para trabajar con claves API de usuario con los mismos permisos que el usuario conectado, utilice el cliente User.apiKeys. Puede crear, recuperar, eliminar, deshabilitar y habilitar claves API de usuario.
// Create user API key final apiKey = await user.apiKeys.create("api-key-name"); // Get existing user API key by ID // Returns `null` if no existing API key for the ID final refetchedApiKey = await user.apiKeys.fetch(apiKey.id); // Get all API keys for a user final apiKeys = await user.apiKeys.fetchAll(); // Disable API key await user.apiKeys.disable(apiKey.id); // Check if API key is enabled print(apiKey.isEnabled); // prints `false` // Enable API key await user.apiKeys.enable(apiKey.id); // Delete a user API key await user.apiKeys.delete(apiKey.id);
Usuario de función personalizada
Si ha configurado el proveedor de autenticación de función personalizada, puede iniciar sesión utilizando la lógica de autenticación personalizada manejada por una función Atlas.
Para iniciar sesión con la autenticación de función personalizada, pase un JSON en cadena con sus argumentos personalizados a Credentials.function(). Luego, pase la credencial app.logIn a.
final credentials = { "username": "someUsername", }; // payload must be a JSON-encoded string final payload = jsonEncode(credentials); final customCredentials = Credentials.function(payload); final currentUser = await app.logIn(customCredentials);
Usuario de Facebook
Si ha configurado el proveedor de autenticación de Facebook, puede iniciar sesión con una cuenta de Facebook existente.
Para iniciar sesión con la autenticación de Facebook, pasa un token de acceso de Facebook a Credentials.facebook(). Luego, pasa la credencial app.logIn a.
final facebookCredentials = Credentials.facebook(accessToken); final currentUser = await app.logIn(facebookCredentials);
Importante
No almacene las URL de las imágenes de perfil de Facebook
Las URL de las fotos de perfil de Facebook incluyen el token de acceso del usuario para otorgar permiso a la imagen. Para garantizar la seguridad, no guardes una URL que incluya el token de acceso del usuario. En su lugar, accede a la URL directamente desde los campos de metadatos del usuario cuando necesites obtener la imagen.
Usuario de Google
Si ha configurado el proveedor de autenticación de Google, puede iniciar sesión con una cuenta de Google existente.
Para iniciar sesión con un código de autenticación de Google, transfiérelo a Credentials.googleAuthCode(). Luego, transfiérelo app.logIn a.
final googleAuthCodeCredentials = Credentials.googleAuthCode(authCode); final currentUser = await app.logIn(googleAuthCodeCredentials);
Para iniciar sesión con un token de Google ID, páselo a Credentials.googleIdToken(). Luego, páselo app.logIn a.
final googleIdTokenCredentials = Credentials.googleIdToken(idToken); final currentUser = await app.logIn(googleIdTokenCredentials);
Usuario de Apple
Si ha configurado el proveedor de autenticación Iniciar sesión con Apple, puede iniciar sesión usando una cuenta Apple existente.
Para iniciar sesión con la autenticación de Apple, envíe un token de acceso de Apple a Credentials.apple(). Luego, envíe la credencial app.logIn a.
final appleCredentials = Credentials.apple(idToken); final currentUser = await app.logIn(appleCredentials);
Tip
Si recibe un error Login failed que indica que token contains
an invalid number of segments, verifique que esté pasando una versión de cadena codificada en UTF-8del JWT.
Vencimiento del token de actualización
Los tokens de actualización caducan tras un periodo determinado. Cuando caducan, el token de acceso ya no se puede actualizar y el usuario debe volver a iniciar sesión.
Si el token de actualización caduca después de abrir el dominio, el dispositivo no podrá sincronizarse hasta que el usuario vuelva a iniciar sesión. El controlador de errores de sincronización debe implementar una lógica que detecte un error de token caducado al intentar sincronizar y luego redirija a los usuarios a un flujo de inicio de sesión.
Para obtener información sobre cómo configurar la expiración del token de actualización, consulte Administrar sesiones de usuario en la documentación de App Services.
Cerrar la sesión de un usuario
Puedes cerrar la sesión de cualquier usuario, independientemente del proveedor de autenticación utilizado, mediante User.logOut(). Este método:
Elimina las credenciales de usuario almacenadas localmente del dispositivo
Detiene inmediatamente cualquier sincronización hacia y desde los reinos del usuario
Debido a que al cerrar la sesión se detiene la sincronización, solo debes cerrar la sesión después de que todas las actualizaciones locales de Realm se hayan cargado en el servidor.
await user.logOut();
Recuperar usuario actual
Una vez que tenga un usuario autenticado, puede recuperar el objeto Usuario con la propiedad App.currentUser. El currentUser objeto se almacena localmente, por lo que, incluso si la aplicación se cierra después de la autenticación inicial, no es necesario volver a llamar logIn a (a menos que el usuario haya cerrado sesión).
final user = app.currentUser;