Docs 菜单
Docs 主页
/ /
Atlas Device SDKs
/ /

对用户进行身份验证 - C++ SDK

在此页面上

  • 登录
  • 匿名用户
  • 电子邮件/密码用户
  • API 密钥用户
  • 自定义函数用户
  • 自定义 JWT 用户
  • Facebook 用户
  • Google 用户
  • Apple 用户
  • 获取用户访问令牌
  • 刷新令牌有效期
  • 登出
  • 获取当前用户
  • 确认用户已登录

如果您在App Services用户界面中启用了匿名身份验证,则用户无需提供任何身份信息即可立即日志您的应用。

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

如果您已启用电子邮件/密码身份验证,并注册了电子邮件/密码用户,则可以登录该用户。

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

如果您已启用API Key 身份验证,则可以使用用户 API Key 登录。

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

如果您已启用自定义函数 身份验证提供程序,则可以使用自定义函数登录。

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

如果您已启用自定义 JSON Web 令牌身份验证提供程序,则可以使用自定义 JSON Web 令牌登录。

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身份验证提供者允许您使用用户现有的 Facebook 帐户通过 Facebook 应用对用户进行身份验证。

重要

启用 Facebook 身份验证提供者

要使用现有 Facebook 帐户登录用户,必须为应用程序配置并启用 Facebook 身份验证提供者

重要

请勿存储 Facebook 个人资料图片的 URL

Facebook 个人资料图片 URL 包含用户的访问令牌,用于授予该图像的权限。为了确保安全,请勿存储包含用户访问令牌的 URL。相反,在需要获取图像时,可直接从用户的元数据字段访问 URL。

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

如果已配置 Google 身份验证提供者,则可以使用现有的 Google 帐户登录。

要使用 Google 身份验证代码登录,请将 Google 身份验证代码传递给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();

要使用 Google ID 令牌登录,请将 Google ID 令牌传递给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();

如果您已启用Sign-in with Apple 身份验证,则可以使用 Apple ID 令牌让用户登录。

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

Realm SDK 会自动管理访问令牌,在访问令牌过期时对其进行刷新,并在每次请求中为当前用户提供有效的访问令牌。

如果您在 SDK 外部发送请求,则必须在每个请求中包含用户的访问令牌。 在这种情况下,您必须在令牌过期时手动刷新令牌。 访问令牌会在30分钟后过期。

您可以对已登录用户调用.refresh_custom_user_data()来刷新用户的身份验证会话。 然后,获取.access_token() 作为可在代码中使用的string 。 您可以使用与此类似的代码来获取访问令牌:

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

刷新令牌会在设定的时间段后过期。刷新令牌过期后,访问令牌将无法再刷新,用户必须重新登录。

如果刷新令牌在 Realm 打开后过期,则在用户再次登录之前设备无法进行同步。同步错误处理程序应实现在尝试同步时捕获令牌过期错误的逻辑,然后将用户重定向到登录流程。

有关配置刷新令牌过期时间的信息,请参阅 App Services 文档中的管理用户会话

登录后,您可以注销。

警告

当用户注销时,您无法再在用户已打开的任何已同步 Realm 中读取或写入数据。因此,在发起用户注销之前尚未完成的所有操作均无法成功完成,且可能会导致错误。以此方式失败的写入操作中的所有数据都将丢失。

user.log_out().get();

您可以使用 app::get_current_user()获取当前用户:

auto currentUser = app.get_current_user();

您可以使用user::is_logged_in()确认用户已登录:

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

后退

管理用户