Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /
Administrar usuarios

Autenticar usuarios - SDK .NET

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:

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

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

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

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

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

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

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

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.

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

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á.

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.

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

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.

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}, {_}");
};

Volver

Create and Delete Users

En esta página