Docs Menu
Docs Home
/ /
Administrar usuarios

Authenticate Users - Flutter SDK

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.

  1. Crear una aplicación de servicios de aplicaciones.

  2. Habilite y configure uno o más proveedores de autenticación de App Services.

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.

Puede autenticar usuarios con App.logIn().

Si tiene éxito, app.logIn devuelve un objeto User.

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));

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.

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);

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);

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);

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.

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);

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.

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.

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();

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;

Volver

Administrar usuarios

En esta página