如何使用Login Widget SDK API调用
如有以下需求,可在登录小组件之外单独使用Login Widget SDK API调用:
- 使用您自己的小组件设计
- 部分实现登录管理器小组件的工作流程
注:
并非所有API调用都支持此场景。
代码初始化
要在不使用小组件的情况下使用Login Widget SDK API调用,请在<body>
标记后追加以下代码:
Copy
<script>
const api = new XsollaLogin.Api({
projectId: 'someProjectId'
});
</script>
使用npm-package时的初始化代码:
Copy
import XsollaLogin from '@xsolla/login-sdk';
const api = new XsollaLogin.Api({
projectId: 'someProjectId'
});
在初始化代码中传入以下参数:
参数 | 类型 | 描述 |
---|---|---|
projectId | string | 您在发布商帐户中的登录管理器项目ID。必需。 |
fullLocale | string | <language code>_<country code> 格式的界面语言和区域,其中:
该参数影响根据指定区域的使用频率对社交网络进行排序,并影响发送给用户的邮件的语言。 |
callbackUrl | string | 登录或注册成功后,艾克索拉登录管理器使用的URL。 |
emailTemplate | string | 向用户发送邮件的项目主体名称。 |
payload | string | 可在代码中传递的额外数据。该数据在用户成功登录后追加到用户JWT中。 |
with_logout | boolean | 新登录期间是否撤销之前的令牌。默认为false 。 |
clientId | string | 客户端应用的ID。如应用使用了基于OAuth 2.0协议的认证,则需传入。 |
scope | string | 应用请求的关于用户帐户的额外信息。如应用使用基于OAuth 2.0协议的认证,则应传入。 可能值:
|
state | string | 用于防止CSRF攻击等的额外用户验证。必须大于8个字符。 |
redirectUrl | string | 用户验证帐户、登录或确认密码重置后将其重定向到的URL。 |
disableConfirmByLink | boolean | 用户通过邮箱或手机免密登录时,是否禁用通过邮件中的链接进行免密认证确认。默认为false 。 |
is_oauth2 | boolean | 是否对用户使用基于OAuth 2.0协议的认证。默认为false 。 |
API调用
可在不使用登录管理器小组件的情况下使用以下Login Widget SDK API调用:
用户使用密码进行注册
调用 | 描述 | 参数 |
---|---|---|
api.signup(userInfo); | 注册新用户。用户数据在注册过程中传入userInfo 对象。已注册用户的令牌在响应中传入。 |
|
Copy
let result
// Request
api.signup({
userInfo: {
email: 'email@address.com',
fields: {
nickname: 'Johny'
},
password: 'password123',
username: 'John'
}
}).then((res) => {
result = res;
})
// Response
result === {
login_url: 'https://someurl.com?token=XXXXXXX'
}
使用密码登录
调用 | 描述 | 参数 |
---|---|---|
api.login(credentials); | 通过密码认证用户。用户登录所必需的用户数据在credentials 对象中传入。通过认证的用户的令牌传入在响应中。 |
|
Copy
let result
// Request
api.login({
credentials: {
password: 'password123',
username: 'email@address.com'
}
}).then((res) => {
result = res;
})
// Response
result === {
login_url: 'https://someurl.com?token=XXXXXXX'
}
// Response with additional fields
result === {
ask_fields: [{
confirmation_type: 'code' || 'link'
name: 'phone_number'
required: false
step: 0 // Displays the position of the field in the data retrieval queue.
type: 'phone'
validation: {} // Custom validation
}]
login_url: 'https://someurl.com?token=XXXXXXX',
token: 'sometoken'
}
帐户确认
调用 | 描述 | 参数 |
---|---|---|
api.resendEmail(username); | 额外发送一封帐户验证邮件。要验证帐户,用户应点击邮件中的链接。用户邮箱地址在username 对象中传入。响应返回标准代码204。 |
|
Copy
let result
// Request
api.resendEmail({
username: 'email@address.com'
}).then((res) => {
res.code === 204;
})
免密认证
用户流程:- 用户输入手机号码或邮箱地址。根据其输入的凭据,调用
api.phoneGetCode
或api.emailGetCode
。 - 服务器收到该数据并将包含验证码的邮件或短信发送给用户。如初始化代码时传入了
disableConfirmByLink=true
(该参数禁用通过邮件中的链接进行登录验证),则使用api.getConfirmCode
调用在用户点击链接后进行自动跳转。 api.phoneGetCode
或api.emailGetCode
调用返回operation_id
参数,用于通过api.loginWithPhoneCode
或api.loginWithEmailCode
调用验证手机号码或邮箱地址。- 邮箱地址或手机号码验证成功后,返回带
token
参数的URL。该参数用于对额外用户数据的请求中。
调用 | 描述 | 参数 |
---|---|---|
api.phoneGetCode({ phone_number, link_url, isOauth2 }); | 向手机号码发送验证码。响应中返回用于确认手机号码的operation_id 参数。 |
|
Copy
let result
// Request
api.phoneGetCode({
phone_number: '+somenumber',
link_url: 'https://someurl.com',
isOauth2: true
}).then((res) => {
result = res;
})
// Response
result === {
operation_id: '2334j255fdf13d515fgd1'
}
调用 | 描述 | 参数 |
---|---|---|
api.phoneGetCode({ phone_number, link_url, isOauth2 }); | 向邮箱地址发送验证码。响应中返回用于确认邮箱地址的operation_id 参数。 |
|
Copy
let result
// Request
api.emailGetCode({
email: 'email@address.com',
link_url: 'https://someurl.com',
isOauth2: true
}).then((res) => {
result = res;
})
// Response
result === {
operation_id: '2334j255fdf13d515fgd1'
}
调用 | 描述 | 参数 |
---|---|---|
api.getConfirmCode({ cancelToken, login, operation_id }); | 获取验证码,以在用户点击链接后进行自动重定向。 |
|
Copy
let result
// Request
const axiosCancelToken = Axios.CancelToken.source();
api.getConfirmCode({
cancelToken: axiosCancelToken,
login: '+somenumber' || 'email@address.com',
operation_id: '334j255fdf13d515fgd1'
}).then((res) => {
result = res;
})
// Response
result === {
code: 'string'
}
// If the waiting time has elapsed, returns:
result === {
error: {
code: '010-050',
description: 'Deadline exceeded.'
}
}
// If you no longer need to wait for verification through the link you can close the request waiting period:
axiosCancelToken.cancel();
调用 | 描述 | 参数 |
---|---|---|
api.loginWithPhoneCode({ phone_number, code, operation_id, isOauth2 }); | 确认手机号码。响应返回带token 参数的URL。该参数用于对额外用户数据的请求中。 |
|
Copy
let result
// Request
api.loginWithPhoneCode({
phone_number: 'email@address.com',
code: '3423',
operation_id: '334j255fdf13d515fgd1',
isOauth2: true
}).then((res) => {
result = res;
})
// Response
result === {
login_url: 'https://someurl.com?token=XXXXXXX'
}
// Response with additional fields
result === {
ask_fields: [{
confirmation_type: 'code' || 'link'
name: 'email'
required: false
step: 0 // Displays the position of the field in the data retrieval queue.
type: 'email'
validation: {} // Custom validation
}]
login_url: 'https://someurl.com?token=XXXXXXX',
token: 'sometoken'
}
调用 | 描述 | 参数 |
---|---|---|
api.loginWithEmailCode({ email, code, operation_id, isOauth2 }); | 确认邮箱地址。响应返回带token 参数的URL。该参数用于对额外用户数据的请求中。 |
|
Copy
let result
// Request
api.loginWithEmailCode({
email: 'email@address.com',
code: '3423',
operation_id: '334j255fdf13d515fgd1',
isOauth2: true
}).then((res) => {
result = res;
})
// Response
result === {
login_url: 'https://someurl.com?token=XXXXXXX'
}
// Response with additional fields
result === {
ask_fields: [{
confirmation_type: 'code' || 'link'
name: 'phone_number'
required: false
step: 0 // Displays the position of the field in the data retrieval queue.
type: 'phone'
validation: {} // Custom validation
}]
login_url: 'https://someurl.com?token=XXXXXXX',
token: 'sometoken'
}
免密情况下的其他字段请求
用户流程:- 成功认证用户后,
api.loginWithEmailCode
或api.loginWithPhoneCode
调用返回可在应用中一个单独表单里显示的一组字段,额外收集用户的手机号码和邮箱地址。您也可以通过执行api.getAskFields
调用来获取该字段列表。 - 用户输入手机号码或邮箱地址。执行
api.ask
。 - 服务器收到数据并向手机号码或邮箱地址发送验证码。如初始化代码时传入了
disableConfirmByLink=true
参数(该参数禁用通过邮件中的链接进行登录验证),则使用api.getConfirmCode
调用在用户点击链接后进行自动重定向。 api.ask
调用返回operation_id
参数,用于通过api.loginWithPhoneCode
或api.loginWithEmailCode
调用验证手机号码或邮箱地址。- 数据验证成功后,返回用于重定向已认证用户的URL。
调用 | 描述 | 参数 |
---|---|---|
api.getAskFields(token); | 获取额外请求的字段列表。 |
|
Copy
let result
// Request
api.getAskFields({
token: 'sometoken'
}).then((res) => {
result = res;
})
// Response
result === [
{
confirmation_type: 'code' || 'link'
name: 'phone_number' || 'email'
required: false
step: 0 // Displays the position of the field in the data retrieval queue.
type: 'phone' || 'email'
validation: {} // Custom validation
}
]
调用 | 描述 | 参数 |
---|---|---|
api.ask({ fields, token, link_url }); | 发送额外用户数据,即手机号码或邮箱地址。响应中返回用于验证指定的手机号码或邮箱地址的operation_id 参数。如不要求验证,则响应中返回用于重定向已认证用户的URL和token 参数。 |
|
Copy
let result
// Request
api.ask({
fields: {
phone_number: '+somenumber'
},
link_url: 'https://someurl.com',
token: 'sometoken'
}).then((res) => {
result = res;
})
// Response
result === {
error: {
code: '003-014'
description: 'Confirm phone number.'
details: { operation_id: 'BPaBScLM44GesoOYSxT5I8QfgIrTSURd' }
}
}
// Response without confirmation
result === {
redirect_url: '<login_url>?token=<token>'
}
邮箱地址发送示例:
Copy
let result
// request
api.ask({
fields: {
email: 'email@address.com'
},
link_url: 'https://someurl.com',
token: 'sometoken'
}).then((res) => {
result = res;
})
// Response
result === {
error: {
code: '003-011'
description: 'Confirm email.'
details: { operation_id: 'BPaBScLM44GesoOYSxT5I8QfgIrTSURd' }
}
}
// Response without confirmation
result === {
redirect_url: '<login_url>?token=<token>'
}
调用 | 描述 | 参数 |
---|---|---|
api.getConfirmCode({ cancelToken, login, operation_id }); | 获取验证码,以在用户点击链接后自动重定向。 |
|
Copy
let result
// Request
const axiosCancelToken = Axios.CancelToken.source();
api.getConfirmCode({
cancelToken: axiosCancelToken,
login: '+somenumber' || 'email@address.com',
operation_id: '334j255fdf13d515fgd1'
}).then((res) => {
result = res;
})
// Response
result === {
code: 'string'
}
// If the waiting time has elapsed, returns:
result === {
error: {
code: '010-050',
description: 'Deadline exceeded.'
}
}
// If you no longer need to wait for verification through the link you can close the request waiting period:
axiosCancelToken.cancel();
调用 | 描述 | 参数 |
---|---|---|
api.loginWithPhoneCode({ phone_number, code, operation_id, isOauth2 }); | 确认手机号码。响应返回带token 参数的URL。该参数用于对额外用户数据的请求中。 |
|
Copy
let result
// Request
api.loginWithPhoneCode({
phone_number: 'email@address.com',
code: '3423',
operation_id: '334j255fdf13d515fgd1',
isOauth2: true
}).then((res) => {
result = res;
})
// Response
result === {
login_url: 'https://someurl.com?token=XXXXXXX'
}
// Response with additional fields
result === {
ask_fields: [{
confirmation_type: 'code' || 'link'
name: 'email'
required: false
step: 0 // Displays the position of the field in the data retrieval queue.
type: 'email'
validation: {} // Custom validation
}]
login_url: 'https://someurl.com?token=XXXXXXX',
token: 'sometoken'
}
调用 | 描述 | 参数 |
---|---|---|
api.loginWithEmailCode({ email, code, operation_id, isOauth2 }); | 确认邮箱地址。响应返回带token 参数的URL。该参数用于对额外用户数据的请求中。 |
|
Copy
let result
// Request
api.loginWithEmailCode({
email: 'email@address.com',
code: '3423',
operation_id: '334j255fdf13d515fgd1',
isOauth2: true
}).then((res) => {
result = res;
})
// Response
result === {
login_url: 'https://someurl.com?token=XXXXXXX'
}
// Response with additional fields
result === {
ask_fields: [{
confirmation_type: 'code' || 'link'
name: 'phone_number'
required: false
step: 0 // Displays the position of the field in the data retrieval queue.
type: 'phone'
validation: {} // Custom validation
}]
login_url: 'https://someurl.com?token=XXXXXXX',
token: 'sometoken'
}
密码重置
用户流程:- 应用程序打开用户输入邮箱地址或用户名的表单。执行
api.reset
调用。 - 服务器向用户发送验证邮件。
- 用户点击邮件中的链接,打开输入新密码的表单。
- 用户输入新密码。执行
api.set
调用。
调用 | 描述 | 参数 |
---|---|---|
api.reset(username); | 重置密码并确认该操作。要确认重置密码,用户应点击邮件中的链接。用户名或用户邮箱地址传入在username 对象中。响应中返回204 代码。 |
|
Copy
let result
// Request
api.reset({
username: 'John'
}).then((res) => {
res.code === 204;
})
调用 | 描述 | 参数 |
---|---|---|
api.set({ new_password, reset_code, user_id }); | 设置新密码并确认该操作。要确认重置密码,用户应点击邮件中的链接。响应中返回204 代码。 |
|
Copy
let result
// Request
api.set({
new_password: 'newpass',
reset_code: '3423',
user_id: '324324234'
}).then((res) => {
res.code === 204;
})
单点登录
注:
请参阅单点登录的说明了解详细信息。
参数 | 类型 | 描述 |
---|---|---|
api.checkUserAuthSSO(); | 检查用户是否通过单点登录授权。如成功,则返回一个一次性code 。 |
Copy
let result
// Request
api
.checkUserAuthSSO()
.then(res => {
result === res;
});
result === {
code: "examplecode"
}
调用 | 描述 | 参数 |
---|---|---|
api.userAuthSSOWithRedirect(loginUrl); | 检查用户是否通过单点登录授权。如成功,用户将被重定向至该URL(即生成的包含一个授权码的loginUrl )。 |
|
Copy
// Request
api
.userAuthSSOWithRedirect(
loginUrl: 'some-redirect-url.com'
)
.then(res => {
res.code === 302;
});
调用 | 描述 | 参数 |
---|---|---|
api.logout(token, session); | 根据session 参数将用户从系统中登出并删除用户会话。 |
|
Copy
// Request
api
.logout(
token: 'exampleToken',
session: 'sso' | 'all'
)
.then(res => {
res.code === 204;
});
参数 | 类型 | 描述 |
---|---|---|
api.clearSSO(); | 从当前用户设备中删除单点登录Cookie文件。如调用成功,则在响应中返回204 代码。 |
Copy
// Request
api
.clearSSO()
.then(() => {
// Success
});
本文对您的有帮助吗?
感谢您的反馈!
我们会查看您的留言并运用它改进用户体验。发现了错别字或其他内容错误? 请选择文本,然后按Ctrl+Enter。