【axios】有木有刷新token的代码参考一下
// http response 拦截器
instance.interceptors.response.use(
response => {
return response
},
error => {
if (error.message === 'Network Error') Message({ type: 'error', message: 'Network error !!! Try again later !!!' })
// 如果服务端有响应,显示响应的错误信息
if (error.response) {
Message({ type: 'error', message: 'The authentication is invalid. Please login again.' })
// 退出登录
switch (error.response.data.status_code) {
case 401:
setTimeout(() => {
store.dispatch('logout')
router.replace({
path: '/login',
query: {
redirect: router.currentRoute.fullPath
}
})
}, 1000)
break
case 404:
setTimeout(() => {
store.dispatch('logout')
router.replace({
path: '/404',
query: {
redirect: router.currentRoute.fullPath
}
})
}, 1000)
break
case 500:
Message({ type: 'error', message: 'The Server is error, try again later !!!' })
}
}
return Promise.reject(error)
}
)
现在写法是 token 过期退出登录,但是业务需求要能刷新token,不太会写,有木有代码参看一下
2 回复
让他每次在数据请求里面把更新过的token返回给你 你在拦截器里面及时更新就行了
import axios from 'axios'
import store from '@/store'
import router from '@/router'
import config from '@/config'
import { Message } from 'element-ui'
// 创建 axios 实例
const instance = axios.create({
baseURL: config.serverUrl,
timeout: 0
})
// http request 拦截器
instance.interceptors.request.use(
config => {
if (store.state.auth.authToken) {
// console.log(store.state.auth.authToken)
config.headers['Authorization'] = `Bearer ${store.state.auth.authToken}`
}
return config
},
error => {
return Promise.reject(error)
}
)
// http response 拦截器
instance.interceptors.response.use(
response => {
let time = setInterval(() => {
instance.get('/auth/refresh', {
'headers': {
'Authorization': `Bearer ${localStorage.authToken}`
}
}).then((response) => {
let authToken = response.headers['authorization'].split(' ')
let token = authToken[1]
store.dispatch('refreshToken', token)
localStorage.authToken = token
})
}, 1000 * 600)
if (store.state.auth.authToken) {
clearTimeout(time)
}
return response
},
error => {
// if (error.message === 'Network Error') Message({ type: 'error', message: 'Network error !!! Try again later !!!' })
// 如果服务端有响应,显示响应的错误信息
if (error.response) {
// Message({ type: 'error', message: 'The authentication is invalid. Please login again.' })
// 退出登录
switch (error.response.data.status_code) {
case 401:
break
case 404:
setTimeout(() => {
store.dispatch('logout')
router.replace({
path: '/404',
query: {
redirect: router.currentRoute.fullPath
}
})
}, 1000)
break
case 500:
Message({ type: 'error', message: 'The Server is error, try again later !!!' })
}
}
return Promise.reject(error)
}
)
export default instance
有观察到token被替换了,但一小时后还是显示token过期,每半小时刷新一次