ユーザーの認証 - C++ SDK
項目一覧
ログイン
匿名ユーザー
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 キー認証を有効にしている場合は、ユーザー 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 を使用してログインでき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 認証プロバイダを設定して有効にする必要があります。
重要
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 認証コードを使用してログインするには、認証情報::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();
Apple ユーザー
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());