Inicia 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();
Correo electrónico/Contraseña Usuario
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();
Usuario de clave API
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 ha habilitado el proveedor de autenticación JWT personalizado, puede 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();
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.
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
Si ha configurado el proveedor de autenticación de Google, puede iniciar sesión con una cuenta de Google existente.
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();
Usuario de Apple
Si ha habilitado el inicio de sesión con autenticación de Apple, puede iniciar sesión como 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 administra automáticamente los tokens de acceso, los actualiza cuando vencen 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 conectado para actualizar su sesión de autenticación. Luego, obtén `.access_token()` como una cadena que puedes usar en tu código. Puedes usar 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();
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.
Cerrar sesión
Una vez que haya iniciado sesión, puede cerrar la sesión.
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.
user.log_out().get();
Obtener el usuario actual
Puedes obtener el usuario actual con app::get_current_user():
auto currentUser = app.get_current_user();
Confirma que el usuario ha iniciado sesión.
Puedes confirmar que un usuario ha iniciado sesión con user::is_logged_in():
auto user = app.login(realm::App::credentials::anonymous()).get(); CHECK(user.is_logged_in());