优化token刷新机制
parent
59a77831d0
commit
84ef71a6c6
|
@ -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),
|
||||||
# 设置前缀
|
# 设置前缀
|
||||||
|
|
|
@ -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/') {
|
||||||
|
errorCreate(`${getErrorMessage(dataAxios.msg)}`)
|
||||||
|
break
|
||||||
|
}
|
||||||
|
var res = await refreshTken()
|
||||||
util.cookies.set('token', res.data.access)
|
util.cookies.set('token', res.data.access)
|
||||||
// 设置请求超时次数
|
// 设置请求超时次数
|
||||||
let config = response.config
|
var config = response.config
|
||||||
config.__retryCount = config.__retryCount || 0
|
|
||||||
if (config.__retryCount >= config.retry) {
|
if (config.__retryCount >= config.retry) {
|
||||||
return Promise.reject()
|
// 如果重试次数超过3次则跳转登录页面
|
||||||
|
router.push({ path: '/login' })
|
||||||
|
errorCreate('认证已失效,请重新登录~')
|
||||||
|
break
|
||||||
}
|
}
|
||||||
config.__retryCount += 1
|
var backoff = new Promise((resolve) => {
|
||||||
const backoff = new Promise((resolve) => {
|
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
resolve()
|
resolve()
|
||||||
}, config.retryDelay || 1)
|
}, config.retryDelay || 1)
|
||||||
})
|
})
|
||||||
return backoff.then(() => {
|
return backoff.then(() => {
|
||||||
config.headers['Authorization'] = 'JWT ' + res.data.access
|
config.headers.Authorization = 'JWT ' + res.data.access
|
||||||
return service(config)
|
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))
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue