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 de C++

Si lo has habilitado Autenticación anónima en la interfaz de usuario de App Services: los usuarios pueden iniciar sesión inmediatamente en su aplicación sin proporcionar ninguna información de identificación.

auto appConfig = realm::App::configuration();
appConfig.app_id = APP_ID;
auto app = realm::App(appConfig);
auto user = app.login(realm::App::credentials::anonymous()).get();

Si has habilitado la autenticación por correo electrónico/contraseña, y has registrado a un usuario con correo electrónico/contraseña, puedes iniciar la sesión de ese usuario.

auto user = app.login(realm::App::credentials::username_password(
userEmail, userPassword))
.get();

Si ha habilitado la autenticación de clave API, puede iniciar sesión usando una clave API de usuario.

auto appConfig = realm::App::configuration();
appConfig.app_id = APP_ID;
auto app = realm::App(appConfig);
auto user = app.login(realm::App::credentials::api_key(API_KEY)).get();

Si ha habilitado el proveedor de autenticación de función personalizada, puede iniciar sesión utilizando una función personalizada.

auto appConfig = realm::App::configuration();
appConfig.app_id = APP_ID;
auto app = realm::App(appConfig);
/* Custom function authentication takes a string parameters argument.
The parameter details vary depending on how you define your custom
authentication function. */
std::string params = "{\"username\": \"bob\"}";
auto user = app.login(realm::App::credentials::function(params)).get();

Si has habilitado el proveedor de autenticación personalizado JWT, puedes iniciar sesión usando un JWT personalizado.

auto token = "<jwt>";
auto appConfig = realm::App::configuration();
appConfig.app_id = APP_ID;
auto app = realm::App(appConfig);
auto user = app.login(realm::App::credentials::custom(token)).get();

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.

auto appConfig = realm::App::configuration();
appConfig.app_id = APP_ID;
auto app = realm::App(appConfig);
auto accessToken = "<token>";
auto user = app.login(realm::App::credentials::facebook(accessToken)).get();

If you have configured the Google authentication provider, you can log in using an existing Google account.

Para iniciar sesión con un código de autenticación de Google, pase un código de autenticación de Google a credentials::google_auth_code().

auto appConfig = realm::App::configuration();
appConfig.app_id = APP_ID;
auto app = realm::App(appConfig);
// The user's server auth code you got from Google
auto myAuthCode = "auth_code_from_google";
auto user =
app.login(realm::App::credentials::google_auth_code(myAuthCode)).get();

Para iniciar sesión con un token de ID de Google, pase un token de ID de Google a credentials::google_id_token().

auto appConfig = realm::App::configuration();
appConfig.app_id = APP_ID;
auto app = realm::App(appConfig);
// The user's OpenID Connect id_token you got from the Google OAuth response
auto myIdToken = "open_id_connect_id_token_from_google";
auto user =
app.login(realm::App::credentials::google_id_token(myIdToken)).get();

Si tienes habilitada la autenticación de inicio de sesión con Apple, puedes iniciar sesión para un usuario usando un token de ID de Apple.

auto appConfig = realm::App::configuration();
appConfig.app_id = APP_ID;
auto app = realm::App(appConfig);
auto idToken = "<token>";
auto user = app.login(realm::App::credentials::apple(idToken)).get();

El SDK de Realm gestiona automáticamente los tokens de acceso, los renueva cuando caducan e incluye un token de acceso válido para el usuario actual con cada solicitud.

Si envía solicitudes fuera del SDK, debe incluir el token de acceso del usuario en cada solicitud. En este caso, debe actualizar el token manualmente cuando caduque. Los tokens de acceso caducan después de 30 minutos.

Puedes llamar a .refresh_custom_user_data() en un usuario registrado para actualizar la sesión de autenticación del usuario. Luego, obten el .access_token() como una string que puedes usar en tu código. Podrías utilizar un código similar a este para obtener un token de acceso:

// With a logged-in user, refresh the custom user data to refresh the auth
// session
user.refresh_custom_user_data().get();
// Then get the user's access token
auto userAccessToken = user.access_token();

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.

Once logged in, you can log out.

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

user.log_out().get();

Puedes obtener el usuario actual con app::get_current_user():

auto currentUser = app.get_current_user();

You can confirm a user is logged in with user::is_logged_in():

auto user = app.login(realm::App::credentials::anonymous()).get();
CHECK(user.is_logged_in());

Volver

Administrar usuarios

En esta página