カスタムユーザーデータストレージ

カスタムユーザーデータストレージを使用する場合、エクソーラログインは仲介者として機能し、すべてのユーザー識別データはユーザー側で保管されます。エクソーラログインは、ウェブフックのヘッダーおよび本文に含まれるトークンで認証データを渡します。

お知らせ
ユーザーのメールアドレス、ソーシャルメディアデータ、ユーザー属性はエクソーラ側に保存されます。パスワードはエクソーラ側には保存されません。
カスタムストレージを使用する場合、次にアクセスできます:
お知らせ
統合をローカルでテストしている場合、エクソーラからのPOSTリクエストはhttp://localhost:3000/my-webhook-endpointのようなURLには届きません。Ngrokを使うと、外部からのアクセス用のトンネルを作ることができ、エクソーラからのリクエストをローカルで受け取ることができます。これについては、ngrokのドキュメンテーションで詳しく読むことができます。 統合をローカルでテストしている場合、エクソーラからのPOSTリクエストはhttp://localhost:3000/my-webhook-endpointのようなURLには届きません。Ngrokを使うと、外部からのアクセス用のトンネルを作ることができ、エクソーラからのリクエストをローカルで受け取ることができます。これについては、ngrokのドキュメンテーションで詳しく読むことができます。

統合フロー

クライアントとして、ログインウィジェットまたはLogin APIコールを使用するアプリケーションを使用できます。クライアントとエクソーラログインサーバー間のインタラクションフローは以下のとおりです:

  1. クライアントはエクソーラログインに送信します。リクエストのフォーマットについてはJWTおよびパスワードエンドポイントで説明されています。
  2. エクソーラログインサーバーはあなたのサーバーにウェブフックを送信します。ヘッダーには“request_type”: “gateway_token”パラメータを持つサーバーJWTが含まれます。トークン検証をセットアップすrには、説明に従ってください。ユーザー識別データの一部は、ウェブフックの本文で渡されます。
  3. ウェブフックの受信を確認するには、サーバーは以下を返す必要があります:
    • 応答が成功した場合は200201、または204 HTTPコード。
    • 指定されたユーザーが見つからなかった場合、または無効な署名が渡された場合は、問題の説明を含む400 HTTPコード。サーバー上で、一時的な問題が発生した場合、ウェブフックハンドラーは5xxHTTPコードを返すこともあります。
  4. エクソーラログインサーバーはサーバーから応答を処理し、認証トークンをクライアントに返します。
  5. クライアントは応答を処理します。

ユーザー識別後にユーザー情報をJWTに追加したい場合は、レスポンスボディに任意のパラメータセットを含むJSONオブジェクトを返してください。このオブジェクトは、JWTのpartner_dataフィールドに保存されます。

お知らせ
追加のユーザーデータを含むJSONの最大長さは1000文字です。
以下のデータをユーザープロファイルプロパティに追加できます:ユーザー属性オブジェクトの配列を渡すことによって、ユーザー属性を更新することもできます。これらのオブジェクトの構造については、以下で説明します。 ユーザー属性オブジェクトの構造:
パラメータ種類説明文
attr_type
stringサービス属性に対するユーザーのアクセス レベルの定義:
  • client — ユーザーが編集可能な属性。このタイプの属性の値は、ユーザーによって入力されるか、クライアント側のゲーム内ロジックに従って指定されます。例:名前とキャラクターのステータス、ゲームの難易度など。
  • server — 読み出し専用の属性。このタイプの属性の値は、アプリケーションのサーバー側で入力および編集されます。定期的に変更する必要のないゲームキャラクターの統計情報やユーザーパラメータの設定に使用することをお勧めします。例えば、ボーナス、ゲームキャラクターのキーパラメータ、ユーザーカテゴリなどを獲得するチャンスがあります
キー
stringユーザーの属性を識別するための属性名。ユーザーごとにユニークである必要があります。
最大長さ:256シンボル。数字、ラテン文字、ハイフン、アンダースコアを使用することができます。
権限
string or nullユーザーの属性へのアクセスのタイプは、メソッドによって返される属性のリストに影響します:
可能な値:publicprivate(デフォルト)。
read_only
string属性が変更から保護されているかどうか。デフォルトでは、falseと属性値の変更は許可されています。
stringユーザーの属性の値。
最大長さ:256シンボル。

ユーザー登録

  1. クライアントは、Register new user POSTリクエストをエクソーラログインサーバーに送信します。リクエストには、Authorization: Bearer {JWT}ヘッダーと、以下の必須パラメータを含める必要があります:

    • projectIdクエリパラメータ — パブリッシャーアカウントのログインプロジェクトのID。
    • 本文パラメータ:
      • username — ユーザー名。許可される長さ:3~255文字。
      • password — ユーザーのパスワード。許可される長さ:6~100文字。
      • email — ユーザーのメールアドレス。許可される長さ:1~255文字。
  2. エクソーラログインサーバーは、「新規ユーザー検URL」にウェブフックを送信します。応答は、このインタラクションフローで説明されている形式である必要があります。応答では、ユーザー属性のリストや必要なJSONオブジェクトを指定できます。レスポンスで提供するJSONオブジェクトは、ユーザーのJWTのpartner_dataフィールドに記録されます。

ウェブフックの例:

Copy
Full screen
Small screen

http

  • http
  • curl
1POST https://your.hostname/your_registration_uri HTTP/1.1
2Authorization: Bearer {JWT}
3Content-Type: application/json
4
5{
6  "email":"j.smith@email.com",
7  "password":"123456",
8  "username":"j.smith@email.com"
9}
1curl --request POST \
2  --url 'https://your.hostname/your_registration_uri' \
3  --header 'authorization: bearer_JWT' \
4  --header 'content-type: application/json' \
5  --data '{"email":"j.smith@email.com","password":"123456","username":"j.smith@email.com"}'

ユーザー属性を含むウェブフックへの応答の例:

Copy
Full screen
Small screen
 1{
 2    "attributes": [
 3      {
 4        "attr_type": "server",
 5        "key": "company",
 6        "permission": "private",
 7        "value": "facebook-promo"
 8      },
 9      {
10        "attr_type": "server",
11        "key": "custom-id",
12        "permission": "private",
13        "value": 48582
14      }
15    ]
16}

JSONオブジェクトを使用したウェブフックへの応答の例:

Copy
Full screen
Small screen
1{ 
2    "id": 123456,
3    "role": "scout"
4}
  1. emailにフラグが付けられ、未確認の時、ユーザーデータはエクソーラデータベースに書き込まれます。ユーザーはアカウント確認メールを受け取ります。
  2. ログインウィジェットを統合している場合、ユーザーは次のメッセージとともにページにリダイレクトされます:{email}に送信した指示に従って、アカウントを確認してください
  3. ユーザー登録に失敗した場合、認証ウィジェットに表示されるエラーメッセージを提供することができます。これを行うには、ユーザ作成リクエストの応答で、以下の詳細を持つerrorオブジェクトを渡します:
    • codeパラメータで、エラーコード(例:011-002)を指定します。
    • descriptionパラメータには、エラーメッセージのテキストを提供します。
エラーメッセージを持つオブジェクトの例:
Copy
Full screen
Small screen
1{
2  "error": {
3    "code": "011-002",
4    "description": "<string>"
5  }
6}

ユーザー名とパスワードによる認証

  1. クライアントは、Auth by username and password POSTリクエストをエクソーラログインサーバーに送信します。リクエストには、Authorization: Bearer {JWT}ヘッダーと、以下の必須パラメータを含める必要があります:
    • projectIdクエリパラメータ — パブリッシャーアカウントのログインプロジェクトのID。
    • 本文パラメータ:
      • username — ユーザー名。許可される長さ:3~255文字。
      • password — ユーザーのパスワード。許可される長さ:6~100文字。
  2. エクソーラログインサーバーは、「ユーザー検証URL」にウェブフックを送信します。応答は、このインタラクションフローで説明されている形式である必要があります。応答では、ユーザー属性のリストや必要なJSONオブジェクトを指定できます。レスポンスで提供するJSONオブジェクトは、ユーザーのJWTのpartner_dataフィールドに記録されます。

ユーザー検証URLウェブフックの例:

Copy
Full screen
Small screen

http

  • http
  • curl
1POST https://your.hostname/your_authentication_uri HTTP/1.1
2Authorization: Bearer {JWT}
3Content-Type: application/json
4
5{
6  "email":"j.smith@email.com",
7  "password":"123456",
8  "username":"j.smith@email.com"
9}
1curl --request POST \
2  --url 'https://your.hostname/your_authentication_uri' \
3  --header 'authorization: bearer_JWT' \
4  --header 'content-type: application/json' \
5  --data '{"email":"j.smith@email.com","password":"123456","username":"j.smith@email.com"}'

ユーザー属性を含むウェブフックへの応答の例:

Copy
Full screen
Small screen
 1{
 2    "attributes": [
 3      {
 4        "attr_type": "server",
 5        "key": "company",
 6        "permission": "private",
 7        "value": "facebook-promo"
 8      },
 9      {
10        "attr_type": "server",
11        "key": "custom-id",
12        "permission": "private",
13        "value": 48582
14      }
15    ]
16}

JSONオブジェクトを使用したウェブフックへの応答の例:

Copy
Full screen
Small screen
1{ 
2    "id": 123456,
3    "role": "scout"
4}
  1. ユーザー認証が失敗した場合、認証ウィジェットに表示するエラーメッセージを提供できます。これを行うには、ユーザー作成リクエストの応答で、以下の詳細情報を含むerrorオブジェクトを渡します:
    • codeパラメータには、エラーコード(例えば、011-002)を指定します。
    • descriptionパラメータには、エラーメッセージのテキストを入力します。
  2. エクソーラログインサーバーはユーザーJWTを生成します。
  3. ユーザーは、tokenクエリパラメータを使用してlogin_urlにリダイレクトされます。このtokenパラメータには、ユーザーJWTが含まれています。
お知らせ
エクソーラデータベースにユーザーデータが書き込まれていない場合は、新しいユーザーが作成されます。

電話番号経由のパスワードレス認証

  1. クライアントは認証フォームを開き、ユーザーが電話番号を入力できるようにします。
  2. ユーザーは自分の電話番号を入力します。
  3. クライアントは、エクソーラログインサーバーにStart auth by phone number POSTリクエストを送信します。リクエストには、Authorization: Bearer {JWT}ヘッダーと、以下の必須パラメータを含める必要があります:
    • projectIdクエリパラメータ — パブリッシャーアカウントのログインプロジェクトのID。
    • phone_number本文パラメータ — ユーザーの電話番号。
  4. クライアントは、ユーザーが検証コードを入力するためのフィールドを表示します。
  5. ユーザーは受信した検証コードを入力します。

  1. クライアントは、エクソーラサーバーにComplete auth by phone number POSTリクエストを送信します。リクエストには、Authorization: Bearer {JWT}ヘッダーと、以下の必須パラメータを含める必要があります:
    • projectIdクエリパラメータ — パブリッシャーアカウントのログインプロジェクトのID。
    • 本文パラメータ:
      • code — 確認コード。
      • phone_number — ユーザーの電話番号。
      • operation_id — 確認コードID。
  2. 初回ユーザー認証の場合、エクソーラログインサーバーはパスワードレスログインURLにウェブフックを送信します。レスポンスは、このインタラクションフローで説明されている形式である必要があります。応答では、ユーザー属性のリストや必要なJSONオブジェクトを指定できます。応答で提供するJSONオブジェクトは、ユーザーのJWTのpartner_dataフィールドに記録されます。
  3. ユーザー認証が失敗した場合、認証ウィジェットに表示するエラーメッセージを提供できます。これを行うには、ユーザー作成リクエストへのレスポンスで、以下の詳細を含むerrorオブジェクトを渡します。
    • codeパラメータには、エラーコード(例:011-002)を指定します。
    • descriptionパラメータには、エラーメッセージのテキストを入力します。
ウェブフックの例:
Copy
Full screen
Small screen

http

  • http
  • curl
1POST https://your.hostname/your_phone_authentication_uri HTTP/1.1
2Authorization: Bearer {JWT}
3Content-Type: application/json
4
5{
6  "login": "+12025550140",
7  "type": "phone"
8}
1curl --request POST \
2  --url 'https://your.hostname/your_phone_authentication_uri' \
3  --header 'authorization: bearer_JWT' \
4  --header 'content-type: application/json' \
5  --data '{"login":"+12025550140","type":"phone"}'

ユーザー属性を含むウェブフックへの応答の例:

Copy
Full screen
Small screen
 1{
 2    "attributes": [
 3      {
 4        "attr_type": "server",
 5        "key": "company",
 6        "permission": "private",
 7        "value": "facebook-promo"
 8      },
 9      {
10        "attr_type": "server",
11        "key": "custom-id",
12        "permission": "private",
13        "value": 48582
14      }
15    ]
16}

JSONオブジェクトを使用したウェブフックへの応答の例:

Copy
Full screen
Small screen
1{ 
2    "id": 123456,
3    "role": "scout"
4}

メール経由でパスワードレス認証

  1. クライアントは認証フォームを開き、ユーザーがメールアドレスを入力できるようにします。
  2. ユーザーは自分のメールアドレスを入力します。
  3. クライアントは、エクソーラログインサーバーにStart auth by email POSTリクエストを送信します。リクエストには、Authorization: Bearer {JWT}ヘッダーと、以下の必須パラメータを含める必要があります:
    • projectIdクエリパラメータ — パブリッシャーアカウントのログインプロジェクトのID。
    • email本文パラメータ — ユーザーのメールアドレス。
  4. クライアントは、ユーザーが検証コードを入力するためのフィールドを表示します。
  5. ユーザーは受信した検証コードを入力します。

  1. クライアントは、エクソーラサーバーにComplete auth by email POSTリクエストを送信します。リクエストには、Authorization: Bearer {JWT}ヘッダーと、以下の必須パラメータを含める必要があります:
    • projectIdクエリパラメータ — パブリッシャーアカウントのログインプロジェクトのID。
    • 本文パラメータ:
      • username — ユーザー名。許可された長さ:3~255文字。
      • code — 確認コード。
      • email — ユーザーのメールアドレス
      • operation_id — 確認コードID
  2. 初回ユーザー認証の場合、エクソーラログインサーバーはパスワードレスログインURLにウェブフックを送信します。レスポンスは、このインタラクションフローで説明されている形式である必要があります。応答では、ユーザー属性のリストや必要なJSONオブジェクトを指定できます。応答で提供するJSONオブジェクトは、ユーザーのJWTのpartner_dataフィールドに記録されます。
  3. ユーザー認証が失敗した場合、認証ウィジェットに表示するエラーメッセージを提供できます。これを行うには、ユーザー作成リクエストへのレスポンスで、以下の詳細を含むerrorオブジェクトを渡します。
    • codeパラメータには、エラーコード(例:011-002)を指定します。
    • descriptionパラメータには、エラーメッセージのテキストを入力します。

ウェブフックの例:

Copy
Full screen
Small screen

http

  • http
  • curl
1POST https://your.hostname/your_email_authentication_uri HTTP/1.1
2Authorization: Bearer {JWT}
3Content-Type: application/json
4
5{
6  "email": "user@mail.com",
7  "type": "email"
8}
1curl --request POST \
2  --url 'https://your.hostname/your_email_authentication_uri' \
3  --header 'authorization: bearer_JWT' \
4  --header 'content-type: application/json' \
5  --data '{"email": "user@mail.com","type": "email"}'

ユーザー属性を含むウェブフックへの応答の例:

Copy
Full screen
Small screen
 1{
 2    "attributes": [
 3      {
 4        "attr_type": "server",
 5        "key": "company",
 6        "permission": "private",
 7        "value": "facebook-promo"
 8      },
 9      {
10        "attr_type": "server",
11        "key": "custom-id",
12        "permission": "private",
13        "value": 48582
14      }
15    ]
16}

JSONオブジェクトを使用したウェブフックへの応答の例:

Copy
Full screen
Small screen
1{ 
2    "id": 123456,
3    "role": "scout"
4}

ソーシャルネットワーク経由の認証

ソーシャルネットワーク経由の認証時にユーザーデータを取得するには、アドミンページのログインプロジェクトの設定(セクションユーザーデータベース > ストレージ > カスタムストレージ)で、ソーシャルログインURLを指定します。ソーシャルネットワークから受信したデータを含むリクエストがこのURLに送信されます。

認証フロー:

  1. クライアントは、エクソーラログインサーバーにAuth via social network POSTリクエストを送信します。リクエストには、Authorization: Bearer {JWT}ヘッダーと、以下の必須パラメータを含める必要があります:
    • projectIdクエリパラメータ — パブリッシャーアカウントのログインプロジェクトのID。
    • provider_nameパスパラメータ — パブリッシャーアカウントでログインに接続されているソーシャルネットワークの名前。指定可能な値:amazonapplebabkabaidubattlenetdiscordepicgamesfacebookgithubgooglekakaolinkedinmailrumicrosoftmsnnaverokpaypalqqredditsteamtwitchtwittervimeovkwechatweiboxboxyahooyandexyoutube
  2. ユーザーはソーシャルネットワークにログインします。
  3. エクソーラログインサーバーは、ソーシャルネットワークから受信したユーザーデータを処理し、ソーシャルログインURLにウェブフックを送信します。応答は、このインタラクションフローで説明されている形式である必要があります。レスポンスでは、ユーザー属性のリストや必要なJSONオブジェクトを指定できます。レスポンスで提供するJSONオブジェクトは、ユーザーのJWTのpartner_dataフィールドに記録されます。

ユーザーデータは、一時的なゲートウェイトークン(“request_type”: “gateway_token”)を持つサーバートークン)としてAuthorizationヘッダーに渡されます。 ゲートウェイトークンの主なフィールド:

クレーム種類説明
expUnix TimestampJWTの有効期限の日時。JWTの存続時間は7分です。 必須。
iatUnix TimestampJWTが発行された日時。 必須。
issstringJWTに署名したサービスhttps://login.xsolla.com必須。
request_typestring定数:gateway_request必須。
xsolla_login_project_idstring(UUID)アドミンページの御社のログインプロジェクトID。 必須。
emailstringユーザーのメールアドレス。
substring(UUID)エクソーラログインサーバー側に書き込まれたユーザーID。 必須。
usernamestringユーザー名。
providerstring認証に使用されるソーシャルネットワークの名前。 必須。
idstringソーシャルネットワークのユーザーID。 必須。
social_access_tokenstringユーザーが認証されたソーシャルネットワークのアクセストークン。このクレームの送信を有効にするには、カスタマーサクセスマネージャーに連絡するか、csm@xsolla.comに電子メールを送信してください。
partner_datastring認証中にサーバーから応答本文で返される任意の種類のデータ。このクレームの送信を有効にするには、カスタマーサクセスマネージャーに連絡するか、csm@xsolla.comに電子メールを送信してください。
トークンペイロードの例:
Copy
Full screen
Small screen
 1{
 2  "exp": 1573635020,
 3  "iat": 1573634600,
 4  "iss": "https://login.xsolla.com",
 5  "request_type": "gateway_request",
 6  "xsolla_login_project_id": "00000000-0000-0000-0000-000000000000",
 7  "sub": "00000000-0000-0000-0000-000000000000",
 8  "email": "example@test.com",
 9  "username": "Smith707",
10  "provider": "google",
11  "id": "123",
12}

ソーシャルログイン URLウェブフックの例:

Copy
Full screen
Small screen

http

  • http
  • curl
1POST https://your.hostname/your_social_authentication_uri HTTP/1.1
2Authorization: Bearer {JWT}
3Content-Type: application/json
4
5{}
1curl --request POST \
2  --url 'https://your.hostname/your_social_authentication_uri' \
3  --header 'authorization: bearer_JWT' \
4  --header 'content-type: application/json'

ユーザー属性を含むウェブフックへの応答の例:

Copy
Full screen
Small screen
 1{
 2    "attributes": [
 3      {
 4        "attr_type": "server",
 5        "key": "company",
 6        "permission": "private",
 7        "value": "facebook-promo"
 8      },
 9      {
10        "attr_type": "server",
11        "key": "custom-id",
12        "permission": "private",
13        "value": 48582
14      }
15    ]
16}

JSONオブジェクトを使用したウェブフックへの応答の例:

Copy
Full screen
Small screen
1{ 
2    "id": 123456,
3    "role": "scout"
4}
  1. ユーザー認証が失敗した場合、認証ウィジェットに表示するエラーメッセージを提供できます。これを行うには、ユーザー作成リクエストの応答で、以下の詳細情報を含むerrorオブジェクトを渡します:
    • codeパラメータには、エラーコード(例えば、011-002)を指定します。
    • descriptionパラメータには、エラーメッセージのテキストを入力します。

ユーザーパスワードのリセット

  1. クライアントは、エクソーラログインサーバーにReset passwordPOSTリクエストを送信します。リクエストには、Authorization: Bearer {JWT}ヘッダーと、以下の必須パラメータを含める必要があります:
    • projectIdクエリパラメータ — パブリッシャーアカウントのログインプロジェクトのID。
    • username本文パラメータ — ユーザー名。許可される長さ:3~255文字。
  2. エクソーラログインサーバーは、ユーザーにパスワードリセット確認メールを送信します。
  3. メール内のパスワードリセット確認後、ユーザーは新しいパスワードを入力できるページにリダイレクトされます。
  4. ユーザーは新しいパスワードを入力します。
  5. エクソーラログインサーバーは、パスワードリセットURLにウェブフックを送信します。
  6. パスワードリセットが失敗した場合、認証ウィジェットに表示するエラーメッセージを提供できます。これを行うには、ユーザー作成リクエストへのレスポンスで、以下の詳細情報を含むerrorオブジェクトを渡します。
    • codeパラメータには、エラーコード(例:011-002)を指定します。
    • descriptionパラメータには、エラーメッセージのテキストを入力します。

パスワードリセットURLウェブフックの例:

Copy
Full screen
Small screen

http

  • http
  • curl
 1POST https://your.hostname/your_reset_uri HTTP/1.1
 2Authorization: Bearer {JWT}
 3Content-Type: application/json
 4
 5{
 6  "username": "john@gmail.com",
 7  "fields": {
 8    "password": "NewPa$$word1"
 9  }
10}
1curl --request POST \
2  --url 'https://your.hostname/your_reset_uri' \
3  --header 'authorization: bearer_JWT' \
4  --header 'content-type: application/json' \
5  --data '{"email":"john@gmail.com","fields":{"password":"NewPa$$word1"}}'
この記事は役に立ちましたか?
ありがとうございます!
改善できることはありますか? メッセージ
申し訳ありません
この記事が参考にならなかった理由を説明してください。 メッセージ
ご意見ありがとうございました!
あなたのメッセージを確認し、体験を向上させるために利用させていただきます。

続きを読む

最終更新日: 2025年6月12日

誤字脱字などのテキストエラーを見つけましたか? テキストを選択し、Ctrl+Enterを押します。

問題を報告する
当社は常にコンテンツを見直しています。お客様のご意見は改善に役立ちます。
フォローアップ用のメールをご提供してください
ご意見ありがとうございました!
フィードバックを送信できませんでした
後でもう一度お試しいただくか、doc_feedback@xsolla.comまでお問い合わせください。