Docs Menu
Docs Home
/ /
Atlas Device SDK
/ /

ユーザーの認証 - C++ SDK

項目一覧

  • ログイン
  • 匿名ユーザー
  • メール/パスワード ユーザー
  • API キー ユーザー
  • カスタム関数ユーザー
  • カスタムJSON web tokenユーザー
  • Facebook ユーザー
  • Google ユーザー
  • Apple ユーザー
  • ユーザー アクセス トークンを取得する
  • リフレッシュ トークンの有効期限
  • ログアウト
  • 現在のユーザーを取得する
  • ユーザーがログインしていることの確認

App Services UI で匿名認証を有効にした場合、ユーザーは識別情報を提供せずにアプリにすぐにログインできます。

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 キー認証を有効にしている場合は、ユーザー API キーを使用してログインできます。

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 token認証プロバイダーを有効にした場合は、カスタム JSON web token を使用してログインできJSON web token 。

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_auth_code() に Google 認証コードを渡します。

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 トークンを認証情報::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());

戻る

ユーザーの管理