自定义存储

如果使用自定义存储,可实现:

交互过程

您可以使用艾克索拉登录管理器小组件或您的应用程序(使用Login API调用)作为客户端。客户端与艾克索拉登录管理器服务器之间的交互流程如下:

  1. 客户端向艾克索拉登录管理器服务器发送请求。请求格式见JWTPassword端点的说明。
  2. 艾克索拉登录管理器服务器向您的服务器发送请求。请按照说明验证请求。
  3. 艾克索拉登录管理器服务器处理您服务器的响应并将结果返回给客户端。
  4. 客户端处理响应。

作为对服务器请求的响应,可通过结构的形式获取用户的信息:

参数类型描述
attr_type
string定义用户对服务属性的访问级别:
  • client — 用户可编辑的属性。此类属性的值由用户输入或根据客户端的游戏内逻辑指定。例如:名字和角色属性、游戏难度等。(默认)
  • server — 只读属性。此类属性的值在应用程序的服务器侧输入或编辑。建议用此类属性配置不常更改的游戏角色属性或用户参数,例如获得某个奖励的机会、游戏角色关键参数、用户类别等。
key
string用于识别用户属性的属性名称。对每个用户必须唯一。
最大长度:256个字符。可使用数字、英文字母、连字符和下划线。
permission
string or null对用户属性的访问权限类型影响方法返回的属性列表:
可能的值:publicprivate(默认)。
value
string用户属性的值。
最大长度:256个字符。

用户注册

  1. 客户端向艾克索拉登录管理器服务器发送Register new user请求。
  2. 艾克索拉登录管理器服务器发送请求至新用户URL。响应必须为此说明中所述的格式。在响应中,您可以指定一个用户属性列表。

新用户URL响应示例:

Copy
Full screen
Small screen
http
  • http
  • curl

POST https://your.hostname/your_registration_uri HTTP/1.1
Authorization: Bearer {JWT}
Content-Type: application/json

{
  "email": "john@gmail.com",
  "password": "123456"
}
curl --request POST \
  --url 'https://your.hostname/your_registration_uri' \
  --header 'authorization: bearer_JWT' \
  --header 'content-type: application/json' \
  --data '{"email":"john@gmail.com","password":"123456"}'

响应示例:

Copy
Full screen
Small screen

    {
        "attributes": [
          {
            "attr_type": "server",
            "key": "company",
            "permission": "private",
            "value": "facebook-promo"
          },
          {
            "attr_type": "server",
            "key": "custom-id",
            "permission": "private",
            "value": 48582
          }
        ]
    }

    1. 用户数据写入艾克索拉数据库,并且email标记为未确认。用户将收到一封帐户验证邮件。
    2. 如果集成了登录管理器小组件,则用户将重定向到包含以下消息的页面:请按照发送至{email}的说明验证您的帐户

    通过用户名和密码进行认证

    1. 客户端向艾克索拉登录管理器服务器发送Auth by username and password请求。
    2. 艾克索拉登录管理器服务器发送请求至用户认证URL。响应必须为此说明中所述的格式。

    新用户URL响应示例:

    Copy
    Full screen
    Small screen
    http
    • http
    • curl

    POST https://your.hostname/your_authentication_uri HTTP/1.1
    Authorization: Bearer {JWT}
    Content-Type: application/json
    
    {
      "email": "john@gmail.com",
      "password": "123456"
    }
    curl --request POST \
      --url 'https://your.hostname/your_authentication_uri' \
      --header 'authorization: bearer_JWT' \
      --header 'content-type: application/json' \
      --data '{"email":"john@gmail.com","password":"123456"}'

    响应示例:

    Copy
    Full screen
    Small screen

      {
          "attributes": [
            {
              "attr_type": "server",
              "key": "company",
              "permission": "private",
              "value": "facebook-promo"
            },
            {
              "attr_type": "server",
              "key": "custom-id",
              "permission": "private",
              "value": 48582
            }
          ]
      }

      1. 艾克索拉登录管理器服务器生成一个用户JWT。
      2. 用户重定向到包含一个token查询参数的login_urltoken参数包含用户JWT。

      注:
      如果艾克索拉数据库中未写入该用户数据,则创建一个新用户。

      通过手机号进行免密认证

      1. 客户端打开一个认证表单让用户输入手机号。
      2. 用户输入手机号。
      3. 客户端向艾克索拉登录管理器服务器发送Start auth by phone number请求。
      4. 客户端显示让用户填写验证码的字段。
      5. 用户输入收到的验证码。
      6. 客户端向艾克索拉登录管理器发送Complete auth by phone number请求。
      7. 如果为首次用户授权,艾克索拉登录管理器服务器向通过手机进行无密码登录URL发送一个请求。响应必须符合此说明中所述的格式。

      新用户URL响应示例:

      Copy
      Full screen
      Small screen
      http
      • http
      • curl

      POST https://your.hostname/your_phone_authentication_uri HTTP/1.1
      Authorization: Bearer {JWT}
      Content-Type: application/json
      
      {
        "login": "+12025550140",
        "type": "phone"
      }
      curl --request POST \
        --url 'https://your.hostname/your_phone_authentication_uri' \
        --header 'authorization: bearer_JWT' \
        --header 'content-type: application/json' \
        --data '{"login":"+12025550140","type":"phone"}'

      响应示例:

      Copy
      Full screen
      Small screen

        {
            "attributes": [
              {
                "attr_type": "server",
                "key": "company",
                "permission": "private",
                "value": "facebook-promo"
              },
              {
                "attr_type": "server",
                "key": "custom-id",
                "permission": "private",
                "value": 48582
              }
            ]
        }

        通过社交网络进行身份验证

        要在通过社交网络进行认证时获取用户数据,请在发布商帐户的登录管理器项目设置中指定社交帐户登录URL(在用户数据库 > 存储 > 自定义存储部分)。包含从社交网络获取的数据的请求将发送到该URL。

        认证流程:

        1. 客户端向艾克索拉登录管理器服务器发送Auth via social network请求。
        2. 用户登录到某个社交网络。
        3. 艾克索拉登录管理器服务器处理从该社交网络收到的用户数据并向社交帐户登录URL发送一个请求。响应必须为此说明中所述的格式。

        请求在临时令牌的Authorization: Bearer <JWT>头中包含数据。请求中传入的用户JWT包含如下数据:

        声明类型描述
        expUnix TimestampJWT的过期日期和时间。JWT寿命为7分钟。 必需
        iatUnix Timestamp使用该JWT时的日期和时间。 必需
        issstring签名JWT的服务,例如https://login.xsolla.com必需
        request_typestring常量:gateway_request必需
        xsolla_login_project_idstring (UUID)您发布商帐户的登录管理器项目ID。 必需
        emailstring用户邮箱地址。
        substring (UUID)写入在艾克索拉登录管理器服务器侧的用户ID。 必需
        usernamestring用户名。
        providerstring认证使用的社交网络的名称。 必需
        idstring社交网络中的用户ID。 必需

        令牌负载示例:

        Copy
        Full screen
        Small screen

        {
          "exp": 1573635020,
          "iat": 1573634600,
          "iss": "https://login.xsolla.com",
          "request_type": "gateway_request",
          "xsolla_login_project_id": "00000000-0000-0000-0000-000000000000",
          "sub": "00000000-0000-0000-0000-000000000000",
          "email": "example@test.com",
          "username": "Smith707",
          "provider": "google",
          "id": "123",
        }

        新用户URL响应示例:

        Copy
        Full screen
        Small screen
        http
        • http
        • curl

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

        响应示例:

        Copy
        Full screen
        Small screen

          {
              "attributes": [
                {
                  "attr_type": "server",
                  "key": "company",
                  "permission": "private",
                  "value": "facebook-promo"
                },
                {
                  "attr_type": "server",
                  "key": "custom-id",
                  "permission": "private",
                  "value": 48582
                }
              ]
          }

          用户密码重置

          1. 客户端向艾克索拉登录管理器服务器发送Reset password请求。
          2. 艾克索拉登录管理器服务器向用户发送一封密码重置确认邮件。
          3. 用户在邮件中确认密码重置后,将被重定向到输入新密码的页面。
          4. 用户输入新的密码。
          5. 艾克索拉登录管理器服务器向密码重置URL发送请求。响应必须为此说明中所述的格式。

          新用户URL响应示例:

          Copy
          Full screen
          Small screen
          http
          • http
          • curl

          POST https://your.hostname/your_reset_uri HTTP/1.1
          Authorization: Bearer {JWT}
          Content-Type: application/json
          
          {
            "username": "john@gmail.com",
            "fields": {
              "password": "NewPa$$word1"
            }
          }
          curl --request POST \
            --url 'https://your.hostname/your_reset_uri' \
            --header 'authorization: bearer_JWT' \
            --header 'content-type: application/json' \
            --data '{"email":"john@gmail.com","fields":{"password":"NewPa$$word1"}}'

          本文对您的有帮助吗?
          谢谢!
          我们还有其他可改进之处吗? 留言
          非常抱歉
          请说明为何本文没有帮助到您。 留言
          感谢您的反馈!
          我们会查看您的留言并运用它改进用户体验。
          为此页面评分
          为此页面评分
          我们还有其他可改进之处吗?

          不想回答

          感谢您的反馈!

          继续阅读

          上次更新时间: 2023年10月10日

          发现了错别字或其他内容错误? 请选择文本,然后按Ctrl+Enter。

          报告问题
          我们非常重视内容质量。您的反馈将帮助我们做得更好。
          请留下邮箱以便我们后续跟进
          感谢您的反馈!