优化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 = { SIMPLE_JWT = {
# token有效时长 # token有效时长
"ACCESS_TOKEN_LIFETIME": timedelta(minutes=1), "ACCESS_TOKEN_LIFETIME": timedelta(minutes=60),
# token刷新后的有效时间 # token刷新后的有效时间
"REFRESH_TOKEN_LIFETIME": timedelta(days=1), "REFRESH_TOKEN_LIFETIME": timedelta(days=1),
# 设置前缀 # 设置前缀

View File

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