feat: 添加刷新令牌支持
* 服务端: 添加对应的接口, 对原有令牌系统稍有修改, 添加了令牌类型 * 客户端: 自动刷新访问令牌, 登录时顺带获取刷新令牌
This commit is contained in:
@@ -51,15 +51,33 @@ class Client {
|
||||
})
|
||||
}
|
||||
return new Promise((resolve) => {
|
||||
this.socket!.timeout(timeout).emit("The_White_Silk", method, args, (err: Error, res: ApiCallbackMessage) => {
|
||||
this.socket!.timeout(timeout).emit("The_White_Silk", method, args, async (err: Error, res: ApiCallbackMessage) => {
|
||||
if (err) return resolve({
|
||||
code: -1,
|
||||
msg: err.message.indexOf("timed out") != -1 ? "請求超時" : err.message,
|
||||
})
|
||||
resolve(res)
|
||||
if (res.code == 401) {
|
||||
const token = await this.refreshAccessToken()
|
||||
if (token) {
|
||||
data.access_token = token
|
||||
data.apply()
|
||||
resolve(await this.invoke(method, {
|
||||
...args,
|
||||
token
|
||||
}, timeout))
|
||||
} else
|
||||
resolve(res)
|
||||
} else
|
||||
resolve(res)
|
||||
})
|
||||
})
|
||||
}
|
||||
static async refreshAccessToken() {
|
||||
const re = await this.invoke("User.refreshAccessToken", {
|
||||
refresh_token: data.refresh_token
|
||||
})
|
||||
return re.data?.access_token
|
||||
}
|
||||
static async auth(token: string, timeout: number = 5000) {
|
||||
const re = await this.invoke("User.auth", {
|
||||
access_token: token
|
||||
|
||||
@@ -35,6 +35,7 @@ export default function LoginDialog({
|
||||
if (checkApiSuccessOrSncakbar(re, "登录失败")) return
|
||||
|
||||
data.access_token = re.data!.access_token as string
|
||||
data.refresh_token = re.data!.refresh_token as string
|
||||
data.apply()
|
||||
location.reload()
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user