Iniciar sesión
Usuario anónimo
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();
Email/Password User
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();
API Key User
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();
Usuario de función personalizada
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();
Usuario JWT personalizado
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();
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.
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();
Usuario de Google
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();
Apple User
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();
Obtener un token de acceso de usuario
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();
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.
Log Out
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();
Get the Current User
Puedes obtener el usuario actual con app::get_current_user():
auto currentUser = app.get_current_user();
Confirma que el usuario ha iniciado sesión.
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());