自定义存储
如果使用自定义存储,可实现:
交互过程
您可以使用艾克索拉登录管理器小组件或您的应用程序(使用Login API调用)作为客户端。客户端与艾克索拉登录管理器服务器之间的交互流程如下:
- 客户端向艾克索拉登录管理器服务器发送请求。请求格式见JWT和Password端点的说明。
- 艾克索拉登录管理器服务器向您的服务器发送请求。请按照说明验证请求。
- 艾克索拉登录管理器服务器处理您服务器的响应并将结果返回给客户端。
- 客户端处理响应。
注:
用户邮箱地址、社交媒体数据和用户属性存储在艾克索拉侧。密码不在艾克索拉侧存储。
- 以任意JSON对象的形式。
注:
- 以包含用户属性的对象数组的形式。对象应具有以下结构:
参数 | 类型 | 描述 |
---|---|---|
attr_type | string | 定义用户对服务属性的访问级别:
|
key | string | 用于识别用户属性的属性名称。对每个用户必须唯一。 最大长度:256个字符。可使用数字、英文字母、连字符和下划线。 |
permission | string or null | 对用户属性的访问权限类型影响方法返回的属性列表: 可能的值: public 、private (默认)。 |
read_only | string | 该属性是否不可修改。默认为false ,允许更改属性值。 |
value | string | 用户属性的值。 最大长度:256个字符。 |
用户注册
- 客户端向艾克索拉登录管理器服务器发送
Register new user 请求。 - 艾克索拉登录管理器服务器向新用户URL发送请求。响应必须符合本集成过程中描述的格式。在响应中,您可以指定用户属性列表或任何必要的JSON对象。您在响应中提供的JSON对象将记录在用户JWT的
partner_data
字段中。
注:
Copy
http
- http
- curl
POST https://your.hostname/your_registration_uri HTTP/1.1
Authorization: Bearer {JWT}
Content-Type: application/json
{
"email":"j.smith@email.com",
"password":"123456",
"username":"j.smith@email.com"
}
curl --request POST \
--url 'https://your.hostname/your_registration_uri' \
--header 'authorization: bearer_JWT' \
--header 'content-type: application/json' \
--data '{"email":"j.smith@email.com","password":"123456","username":"j.smith@email.com"}'
包含用户属性的响应示例:
Copy
- json
{
"attributes": [
{
"attr_type": "server",
"key": "company",
"permission": "private",
"value": "facebook-promo"
},
{
"attr_type": "server",
"key": "custom-id",
"permission": "private",
"value": 48582
}
]
}
包含JSON对象的响应示例:
Copy
- json
{ "region": "Asia",
"type": "new"
}
- 用户数据写入艾克索拉数据库,并且
email
标记为未确认。用户将收到一封帐户验证邮件。 - 如果集成了登录管理器小组件,则用户将重定向到包含以下消息的页面:请按照发送至{email}的说明验证您的帐户。
- 如果用户注册不成功,可提供一条显示在认证小组件中的错误消息。方法是在用户创建请求的响应中,传入包含以下详细信息的
error
对象:- 在
code
参数中,指定011-002
。 - 在
description
参数中,提供错误消息的文本。
- 在
Copy
- json
{
"error": {
"code": "011-002",
"description": "<string>"
}
}
通过用户名和密码进行认证
- 客户端向艾克索拉登录管理器服务器发送
Auth by username and password 请求。 - 艾克索拉登录管理器服务器向用户验证URL发送请求。响应必须符合本集成过程中描述的格式。在响应中,您可以指定用户属性列表或任何必要的JSON对象。您在响应中提供的JSON对象将记录在用户JWT的
partner_data
字段中。
注:
Copy
http
- http
- curl
POST https://your.hostname/your_authentication_uri HTTP/1.1
Authorization: Bearer {JWT}
Content-Type: application/json
{
"email":"j.smith@email.com",
"password":"123456",
"username":"j.smith@email.com"
}
curl --request POST \
--url 'https://your.hostname/your_authentication_uri' \
--header 'authorization: bearer_JWT' \
--header 'content-type: application/json' \
--data '{"email":"j.smith@email.com","password":"123456","username":"j.smith@email.com"}'
包含用户属性的响应示例:
Copy
- json
{
"attributes": [
{
"attr_type": "server",
"key": "company",
"permission": "private",
"value": "facebook-promo"
},
{
"attr_type": "server",
"key": "custom-id",
"permission": "private",
"value": 48582
}
]
}
包含JSON对象的响应示例:
Copy
- json
{ "region": "Asia",
"type": "new"
}
- 艾克索拉登录管理器服务器生成一个用户JWT。
- 用户重定向到包含一个
token
查询参数的login_url
。token
参数包含用户JWT。
注:
如果艾克索拉数据库中未写入该用户数据,则创建一个新用户。
通过手机号进行免密认证
- 客户端打开一个认证表单让用户输入手机号。
- 用户输入手机号。
- 客户端向艾克索拉登录管理器服务器发送
Start auth by phone number 请求。 - 客户端显示让用户填写验证码的字段。
- 用户输入收到的验证码。
- 客户端向艾克索拉登录管理器发送
Complete auth by phone number 请求。 - 如果为首次用户授权,艾克索拉登录管理器服务器向通过手机进行无密码登录URL发送一个请求。响应必须符合此集成过程中所述的格式。在响应中,您可以指定用户属性列表或任何所需的JSON对象。您在响应中提供的JSON对象将记录在用户JWT的
partner_data
字段中。
注:
Copy
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
- json
{
"attributes": [
{
"attr_type": "server",
"key": "company",
"permission": "private",
"value": "facebook-promo"
},
{
"attr_type": "server",
"key": "custom-id",
"permission": "private",
"value": 48582
}
]
}
包含JSON对象的响应示例:
Copy
- json
{ "region": "Asia",
"type": "new"
}
通过邮箱进行免密认证
- 客户端打开一个认证表单让用户输入邮箱地址。
- 用户输入邮箱地址。
- 客户端向艾克索拉登录管理器服务器发送
Start auth by email 请求。 - 客户端显示让用户填写验证码的字段。
- 用户输入收到的验证码。
- 客户端向艾克索拉登录管理器发送
Complete auth by email 请求。 - 如果为首次用户授权,艾克索拉登录管理器服务器向通过邮箱进行无密码登录URL发送一个请求。响应必须符合此集成过程中所述的格式。在响应中,您可以指定用户属性列表或任何所需的JSON对象。您在响应中提供的JSON对象将记录在用户JWT的
partner_data
字段中。
注:
Copy
http
- http
- curl
POST https://your.hostname/your_email_authentication_uri HTTP/1.1
Authorization: Bearer {JWT}
Content-Type: application/json
{
"email": "user@mail.com",
"type": "email"
}
curl --request POST \
--url 'https://your.hostname/your_email_authentication_uri' \
--header 'authorization: bearer_JWT' \
--header 'content-type: application/json' \
--data '{"email": "user@mail.com","type": "email"}'
包含用户属性的响应示例:
Copy
- json
{
"attributes": [
{
"attr_type": "server",
"key": "company",
"permission": "private",
"value": "facebook-promo"
},
{
"attr_type": "server",
"key": "custom-id",
"permission": "private",
"value": 48582
}
]
}
包含JSON对象的响应示例:
Copy
- json
{ "region": "Asia",
"type": "new"
}
通过社交网络进行身份验证
要在通过社交网络进行认证时获取用户数据,请在发布商帐户的登录管理器项目设置中指定社交帐户登录URL(在用户数据库 > 存储 > 自定义存储部分)。包含从社交网络获取的数据的请求将发送到该URL。
认证过程:
- 客户端向艾克索拉登录管理器服务器发送
Auth via social network 请求。 - 用户登录社交网络。
- 艾克索拉登录管理器服务器处理从社交网络接收的用户数据,并向社交帐户登录URL发送请求。响应必须符合此场景中描述的格式。在响应中,您可以指定用户属性列表或任何必要的JSON对象。您在响应中提供的JSON对象将记录在用户JWT的
partner_data
字段中。
注:
Authorization: Bearer <JWT>
头中包含数据。请求中传入的用户JWT包含如下数据:声明 | 类型 | 描述 |
---|---|---|
exp | Unix Timestamp | JWT的过期日期和时间。JWT寿命为7分钟。 必需。 |
iat | Unix Timestamp | 使用该JWT时的日期和时间。 必需。 |
iss | string | 签名JWT的服务,例如https://login.xsolla.com 。 必需。 |
request_type | string | 常量:gateway_request 。 必需。 |
xsolla_login_project_id | string (UUID) | 您发布商帐户的登录管理器项目ID。 必需。 |
string | 用户邮箱地址。 | |
sub | string (UUID) | 写入在艾克索拉登录管理器服务器侧的用户ID。 必需。 |
username | string | 用户名。 |
provider | string | 认证使用的社交网络的名称。 必需。 |
id | string | 社交网络中的用户ID。 必需。 |
social_access_token | string | 用户通过其进行身份认证的社交网络的访问令牌。要启用此声明的传输,请联系您的客户成功经理或发送邮件至csm@xsolla.com。 |
partner_data | string | 您的服务器在用户认证期间在响应正文中返回的任何类型的数据。要启用此声明的传输,请联系您的客户成功经理或发送邮件至csm@xsolla.com。 |
Copy
- json
{
"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
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
- json
{
"attributes": [
{
"attr_type": "server",
"key": "company",
"permission": "private",
"value": "facebook-promo"
},
{
"attr_type": "server",
"key": "custom-id",
"permission": "private",
"value": 48582
}
]
}
包含JSON对象的响应示例:
Copy
- json
{ "region": "Asia",
"type": "new"
}
用户密码重置
- 客户端向艾克索拉登录管理器服务器发送
Reset password 请求。 - 艾克索拉登录管理器服务器向用户发送一封密码重置确认邮件。
- 用户在邮件中确认密码重置后,将被重定向到输入新密码的页面。
- 用户输入新的密码。
- 艾克索拉登录管理器服务器向密码重置URL发送请求。
新用户URL响应示例:
Copy
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"}}'
本文对您的有帮助吗?
感谢您的反馈!
我们会查看您的留言并运用它改进用户体验。继续阅读
有用链接
如何连接自定义存储发现了错别字或其他内容错误? 请选择文本,然后按Ctrl+Enter。