El SDK proporciona una API para autenticar usuarios mediante cualquier proveedor de autenticación habilitado. Crear una instancia
Objeto de credenciales y páselo al método LogInAsync() para autenticarse y obtener una instancia de usuario. Credentials La clase expone métodos de fábrica que corresponden a cada uno de los proveedores de autenticación:
Antes de poder autenticar a un usuario, asegúrese de tener:
Habilitó uno o más proveedores de autenticación
Inicia sesión
Usuario anónimo
Si ha habilitado la autenticación anónima en la interfaz de usuario de App Services, los usuarios podrán iniciar sesión inmediatamente en su aplicación sin proporcionar información de identificación. El siguiente código muestra cómo hacerlo:
var user = await app.LogInAsync(Credentials.Anonymous());
Correo electrónico/Contraseña Usuario
Si ha habilitado la autenticación de correo electrónico/contraseña, puede iniciar sesión utilizando el siguiente código:
var user = await app.LogInAsync( Credentials.EmailPassword("caleb@mongodb.com", "MySekritPwd"));
Usuario de clave API
Si ha habilitado la autenticación de clave API, puede iniciar sesión utilizando el siguiente código:
var user = await app.LogInAsync(Credentials.ApiKey(apiKey));
Usuario JWT personalizado
Si ha habilitado el proveedor de autenticación JWT personalizado, puede iniciar sesión con el siguiente código:
var user = await app.LogInAsync(Credentials.JWT(jwt_token));
Usuario de función personalizada
Si ha habilitado el proveedor de autenticación de función personalizada, puede iniciar sesión utilizando el siguiente código:
var functionParameters = new { username = "caleb", password = "MySekritPwd", IQ = 42, hasPets = true }; var user = await app.LogInAsync(Credentials.Function(functionParameters));
Usuario de Facebook
El proveedor de autenticación de Facebook le permite autenticar usuarios a través de una aplicación de Facebook utilizando su cuenta de Facebook existente.
Importante
Habilitar el proveedor de autenticación de Facebook
Para iniciar sesión un usuario con su cuenta de Facebook existente, debe configurar y habilitar el proveedor de autenticación de Facebook para su aplicación.
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.
var user = await app.LogInAsync(Credentials.Facebook(facebookToken));
Usuario de Google
Si has habilitado la autenticación de Google, puedes iniciar sesión usando el siguiente código:
var user = await app.LogInAsync(Credentials.Google(googleAuthCode, GoogleCredentialType.AuthCode));
Usuario de Apple
Si ha habilitado el inicio de sesión con autenticación de Apple, puede iniciar sesión con el siguiente código:
var user = await app.LogInAsync(Credentials.Apple(appleToken));
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.
Inicio de sesión sin conexión
Cuando tu aplicación Realm autentica a un usuario, almacena en caché las credenciales del usuario. Puedes comprobar si existen credenciales de usuario para omitir el flujo de inicio de sesión y acceder al usuario almacenado en caché. Usa esto para abrir un realm sin conexión.
Nota
El inicio de sesión inicial requiere una conexión de red
Cuando un usuario se registra en tu aplicación o inicia sesión por primera vez con una cuenta existente en un cliente, este debe tener conexión de red. Comprobar las credenciales de usuario en caché permite abrir un reino sin conexión, pero solo si el usuario ha iniciado sesión previamente con conexión.
El siguiente ejemplo comprueba si hay un objeto Usuario en caché. De no ser así, inicia la sesión del usuario. De lo contrario, utiliza las credenciales en caché:
if (app.CurrentUser == null) { // App must be online for user to authenticate user = await app.LogInAsync( Credentials.EmailPassword("caleb@mongodb.com", "MySekritPwd")); config = new PartitionSyncConfiguration("_part", user); realm = await Realm.GetInstanceAsync(config); } else { // This works whether online or offline user = app.CurrentUser; config = new PartitionSyncConfiguration("_part", user); realm = Realm.GetInstance(config); }
Cerrar la sesión de un usuario
Una vez que haya iniciado sesión, puede cerrar sesión llamando al método LogOutAsync():
await user.LogOutAsync();
Advertencia
Cuando un usuario cierra sesión, ya no se pueden leer ni escribir datos en los dominios sincronizados que haya abierto. Por lo tanto, cualquier operación que no se haya completado antes de que el usuario cierre sesión no podrá completarse correctamente y probablemente generará un error. Los datos de una operación de escritura que falle de esta manera se perderán.
Recuperar el 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 LoginAsync a (a menos que el usuario haya cerrado sesión). En su lugar, utilice Realm.GetInstance(config), donde config es un objeto PartitionSyncConfiguration. Este enfoque acelera el inicio y permite al usuario trabajar sin conexión.
Obtener un token de acceso de usuario
Cuando un usuario inicia sesión, Atlas App Services crea un token de acceso que le otorga acceso a su aplicación. El SDK de Realm administra automáticamente los tokens de acceso, los actualiza cuando caducan e incluye un token de acceso válido para el usuario actual con cada solicitud. Realm no actualiza automáticamente el token de actualización. Cuando este caduque, el usuario deberá volver a iniciar sesión.
Si envía solicitudes fuera del SDK, debe incluir el token de acceso del usuario con cada solicitud y actualizar manualmente el token cuando caduque.
Puede acceder y actualizar el token de acceso de un usuario que haya iniciado sesión en el SDK desde su objeto Realm.User, como en el siguiente ejemplo:
// Returns a valid user access token to authenticate requests public async Task<string> GetValidAccessToken(User user) { // An already logged in user's access token might be stale. To // guarantee that the token is valid, refresh it. await user.RefreshCustomDataAsync(); return user.AccessToken; }
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.
Observar los cambios de autenticación
Novedad en la versión11.6.0 v.
Puede observar un flujo de eventos de cambio de autenticación llamando a User.Changed() en un objeto de usuario válido.
Actualmente, User.Changed() se activa en todos los eventos de usuario y debes agregar un controlador para garantizar que tus respuestas a los eventos sean idempotentes.
app.CurrentUser.Changed += (change, _) => { Debug.WriteLine($"Auth change: {change}, {_}"); };