Token Expiration Renewal
发布于 2026-07-06 08:32:57
1 次浏览
// Response interceptor
instance.interceptors.response.use(
response => {
// Hide loading indicator
Toast.clear()
return response
},
async error => {
Toast.clear()
// 1. Get tokenInfo object from vuex, format: { token, refresh_token }
const tokenInfo = store.state.tokenInfo
// 2. Check if token has expired
if (error.response && error.response.status === 401 && tokenInfo.refresh_token) {
// Token expired
console.log('Token expired!')
try {
// 3.1 TODO: Make request to get a new valid token using refresh_token
const { data: res } = await exchangeTokenAPI(tokenInfo.refresh_token)
// 3.2 TODO: Update Token in Store
store.commit('updateTokenInfo', { token: res.data.token, refresh_token: tokenInfo.refresh_token })
// 3.3 Retry the original failed request
// 3.3.1 If we return a new Promise async request in the response interceptor, the result of this request will be treated as the return value of the original request
return instance(error.config)
} catch {
// Both token and refresh_token are invalid
// 4.1 Clear vuex and localStorage
store.commit('cleanState')
// 4.2 Force redirect to login page
router.replace('/login?pre=' + router.currentRoute.fullPath)
}
}
return Promise.reject(error)
}
)
暂无评论。