1 Star 1 Fork 0

justorez/auto-refresh-token

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
index.ts 2.41 KB
一键复制 编辑 原始数据 按行查看 历史
justorez 提交于 2023-10-18 17:29 . initial project
import axios from 'axios'
export class AxiosRetry {
// 维护一个 promise
private fetchNewTokenPromise: Promise<any> | null = null
// 一些必须的配置
private baseUrl: string
private url: string
private getRefreshToken: () => string | null
private unauthorizedCode: string | number
private onSuccess: (res: any) => any
private onError: (err?: any) => any
constructor({
baseUrl,
url,
getRefreshToken,
unauthorizedCode = 401,
onSuccess,
onError
}: {
baseUrl: string
url: string
getRefreshToken: () => string | null
unauthorizedCode?: number | string
onSuccess: (res: any) => any
onError: (err: any) => any
}) {
this.baseUrl = baseUrl
this.url = url
this.getRefreshToken = getRefreshToken
this.unauthorizedCode = unauthorizedCode
this.onSuccess = onSuccess
this.onError = onError
}
requestWrapper<T>(request: () => Promise<T>): Promise<T> {
return new Promise<T>((resolve, reject) => {
// 先把请求函数保存下来
const requestFn = request
return request()
.then(resolve)
.catch((err) => {
if (
err?.status === this.unauthorizedCode &&
!(err?.config?.url === this.url) // 不处理获取 token 的请求
) {
if (!this.fetchNewTokenPromise) {
this.fetchNewTokenPromise = this.fetchNewToken()
}
return this.fetchNewTokenPromise
.then(() => requestFn().then(resolve, reject)) // 获取 token 成功后,重新执行请求
.catch(console.error)
.finally(() => (this.fetchNewTokenPromise = null))
} else {
reject(err)
}
})
})
}
// 获取 token 的函数
fetchNewToken() {
return axios.get(this.url, {
baseURL: this.baseUrl,
headers: {
Authorization: this.getRefreshToken()
}
})
.then(this.onSuccess)
.catch(() => {
this.onError()
throw new Error('Failed to fetch a new token')
})
}
}
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/justorez/auto-refresh-token.git
git@gitee.com:justorez/auto-refresh-token.git
justorez
auto-refresh-token
auto-refresh-token
main

搜索帮助

0d507c66 1850385 C8b1a773 1850385