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:
Before you can authenticate a user, ensure you have:
Se ha habilitado uno o más proveedores de autenticación
Iniciar sesión
Usuario anónimo
If you have enabled Anonymous authentication in the App Services UI, users can immediately log into your app without providing any identifying information. The following code shows how to do this:
var user = await app.LogInAsync(Credentials.Anonymous());
Email/Password User
Si has activado la autenticación por correo electrónico/contraseña, puedes iniciar sesión utilizando el siguiente código:
var user = await app.LogInAsync( Credentials.EmailPassword("caleb@mongodb.com", "MySekritPwd"));
API Key User
Si ha activado autenticación con claves API, puede iniciar sesión utilizando el siguiente código:
var user = await app.LogInAsync(Credentials.ApiKey(apiKey));
Usuario JWT personalizado
Si tienes habilitado el proveedor de autenticación JWT personalizado, puedes iniciar sesión utilizando el siguiente código:
var user = await app.LogInAsync(Credentials.JWT(jwt_token));
Usuario de función personalizada
Si has habilitado el Proveedor de autenticación Función personalizada, puedes iniciar sesión con el siguiente código:
var functionParameters = new { username = "caleb", password = "MySekritPwd", IQ = 42, hasPets = true }; var user = await app.LogInAsync(Credentials.Function(functionParameters));
Facebook User
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
Do Not Store Facebook Profile Picture URLs
Facebook profile picture URLs include the user's access token to grant permission to the image. To ensure security, do not store a URL that includes a user's access token. Instead, access the URL directly from the user's metadata fields when you need to fetch the image.
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));
Apple User
If you have enabled Sign-in with Apple authentication, you can log in using the following code:
var user = await app.LogInAsync(Credentials.Apple(appleToken));
Tip
If you get a Login failed error saying that the token contains
an invalid number of segments, verify that you're passing a UTF-8-encoded string version of the 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.
The following example checks if there is a cached User object. If not, it logs the user in. Otherwise, it uses the cached credentials:
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); }
Log a User Out
Una vez que inicies sesión, puedes cerrar sesión llamando al método LogOutAsync():
await user.LogOutAsync();
Advertencia
Cuando un usuario cierra su sesión, ya no puedes leer ni escribir datos en los realms sincronizados que haya abierto ese usuario. Como resultado, cualquier operación que no se haya completado antes de que el usuario que la inició cierre su sesión no podrá completarse correctamente y es probable que genere un error. Cualquier dato en una operación de escritura que falle de esta manera se perderá.
Retrieve the Current User
Once you have an authenticated user, you can retrieve the User object with the App.CurrentUser property. The CurrentUser object is persisted in local storage, so even if the app shuts down after the initial authentication, you do not need to call LoginAsync again (unless the user logged out). Instead, use Realm.GetInstance(config), where config is a PartitionSyncConfiguration object. This approach results in a faster start-up and also enables the user to work offline.
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.
If you send requests outside of the SDK, you need to include the user's access token with each request and manually refresh the token when it expires.
Puedes acceder y actualizar el token de acceso de un usuario con la sesión iniciada en el SDK directamente desde su objeto Realm.User, como se muestra 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; }
Expiración del token de actualización
Refresh tokens expire after a set period of time. When the refresh token expires, the access token can no longer be refreshed and the user must log in again.
If the refresh token expires after the realm is open, the device will not be able to sync until the user logs in again. Your sync error handler should implement logic that catches a token expired error when attempting to sync, then redirect users to a login flow.
For information on configuring refresh token expiration, refer to Manage User Sessions in the App Services documentation.
Observe Authentication Changes
Novedades en la versión v11.6.0.
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}, {_}"); };