自定义存储
如果使用自定义存储,可实现:
交互过程
您可以使用艾克索拉登录管理器小组件或您的应用程序(使用Login API调用)作为客户端。客户端与艾克索拉登录管理器服务器之间的交互流程如下:
- 客户端向艾克索拉登录管理器服务器发送请求。请求格式见JWT和Password端点的说明。
- 艾克索拉登录管理器服务器向您的服务器发送请求。请按照说明验证请求。
- 艾克索拉登录管理器服务器处理您服务器的响应并将结果返回给客户端。
- 客户端处理响应。
注:
用户邮箱地址、社交媒体数据和用户属性存储在艾克索拉侧。密码不在艾克索拉侧存储。
参数 | 类型 | 描述 |
---|---|---|
attr_type | string | 定义用户对服务属性的访问级别:
|
key | string | 用于识别用户属性的属性名称。对每个用户必须唯一。 最大长度:256个字符。可使用数字、英文字母、连字符和下划线。 |
permission | string or null | 对用户属性的访问权限类型影响方法返回的属性列表: 可能的值: public 、private (默认)。 |
read_only | string | 该属性是否不可修改。默认为false ,允许更改属性值。 |
value | string | 用户属性的值。 最大长度:256个字符。 |
用户注册
- 客户端向艾克索拉登录管理器服务器发送
Register new user 请求。 - 艾克索拉登录管理器服务器发送请求至新用户URL。响应必须为此说明中所述的格式。在响应中,您可以指定一个用户属性列表。
新用户URL响应示例:
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
}
]
}
- 用户数据写入艾克索拉数据库,并且
email
标记为未确认。用户将收到一封帐户验证邮件。 - 如果集成了登录管理器小组件,则用户将重定向到包含以下消息的页面:请按照发送至{email}的说明验证您的帐户。
- 如果用户注册不成功,可提供一条显示在认证小组件中的错误消息。方法是在用户创建请求的响应中,传入包含以下详细信息的
error
对象:- 在
code
参数中,指定011-002
。 - 在
description
参数中,提供错误消息的文本。
- 在
Copy
- json
{
"error": {
"code": "011-002",
"description": "<string>"
}
}
通过用户名和密码进行认证
- 客户端向艾克索拉登录管理器服务器发送
Auth by username and password 请求。 - 艾克索拉登录管理器服务器发送请求至用户认证URL。响应必须为此说明中所述的格式。
新用户URL响应示例:
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
}
]
}
- 艾克索拉登录管理器服务器生成一个用户JWT。
- 用户重定向到包含一个
token
查询参数的login_url
。token
参数包含用户JWT。
注:
如果艾克索拉数据库中未写入该用户数据,则创建一个新用户。
通过手机号进行免密认证
- 客户端打开一个认证表单让用户输入手机号。
- 用户输入手机号。
- 客户端向艾克索拉登录管理器服务器发送
Start auth by phone number 请求。 - 客户端显示让用户填写验证码的字段。
- 用户输入收到的验证码。
- 客户端向艾克索拉登录管理器发送
Complete auth by phone number 请求。 - 如果为首次用户授权,艾克索拉登录管理器服务器向通过手机进行无密码登录URL发送一个请求。响应必须符合此说明中所述的格式。
新用户URL响应示例:
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
}
]
}
通过社交网络进行身份验证
要在通过社交网络进行认证时获取用户数据,请在发布商帐户的登录管理器项目设置中指定社交帐户登录URL(在用户数据库 > 存储 > 自定义存储部分)。包含从社交网络获取的数据的请求将发送到该URL。
认证流程:
- 客户端向艾克索拉登录管理器服务器发送
Auth via social network 请求。 - 用户登录到某个社交网络。
- 艾克索拉登录管理器服务器处理从该社交网络收到的用户数据并向社交帐户登录URL发送一个请求。响应必须为此说明中所述的格式。
请求在临时令牌的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。 必需。 |
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
}
]
}
用户密码重置
- 客户端向艾克索拉登录管理器服务器发送
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。