优化token刷新机制

pull/91/MERGE
李强 2023-04-01 17:14:15 +08:00
parent 59a77831d0
commit 84ef71a6c6
2 changed files with 26 additions and 23 deletions

View File

@ -294,7 +294,7 @@ from datetime import timedelta
SIMPLE_JWT = {
# token有效时长
"ACCESS_TOKEN_LIFETIME": timedelta(minutes=1),
"ACCESS_TOKEN_LIFETIME": timedelta(minutes=60),
# token刷新后的有效时间
"REFRESH_TOKEN_LIFETIME": timedelta(days=1),
# 设置前缀

View File

@ -55,7 +55,7 @@ function createService () {
)
// 响应拦截
service.interceptors.response.use(
response => {
async response => {
// dataAxios axios 返回数据中的 data
let dataAxios = response.data || null
if (response.headers['content-disposition']) {
@ -76,26 +76,29 @@ function createService () {
// return dataAxios.data
return dataAxios
case 401:
refreshTken().then(res => {
util.cookies.set('token', res.data.access)
// 设置请求超时次数
let config = response.config
config.__retryCount = config.__retryCount || 0
if (config.__retryCount >= config.retry) {
return Promise.reject()
}
config.__retryCount += 1
const backoff = new Promise((resolve) => {
setTimeout(() => {
resolve()
}, config.retryDelay || 1)
})
return backoff.then(() => {
config.headers['Authorization'] = 'JWT ' + res.data.access
return service(config)
})
if (response.config.url === 'api/login/') {
errorCreate(`${getErrorMessage(dataAxios.msg)}`)
break
}
var res = await refreshTken()
util.cookies.set('token', res.data.access)
// 设置请求超时次数
var config = response.config
if (config.__retryCount >= config.retry) {
// 如果重试次数超过3次则跳转登录页面
router.push({ path: '/login' })
errorCreate('认证已失效,请重新登录~')
break
}
var backoff = new Promise((resolve) => {
setTimeout(() => {
resolve()
}, config.retryDelay || 1)
})
return backoff.then(() => {
config.headers.Authorization = 'JWT ' + res.data.access
return service(config)
})
break
case 404:
dataNotFound(`${dataAxios.msg}`)
break
@ -190,8 +193,8 @@ function createRequestFunction (service) {
baseURL: util.baseURL(),
data: {},
params: params,
retry: 3, //重新请求次数
retryDelay: 1500 //重新请求间隔
retry: 3, // 重新请求次数
retryDelay: 1000 // 重新请求间隔
}
return service(Object.assign(configDefault, config))
}