处理token失效问题
token
refresh_token
request.interceptors.response.use(
response => {
// 成功的
return response
},
async error => {
// 对响应错误做点什么
//1 token 问题
// 失效 ? 没有token ?
if (error.response.status === 401) {
//2. 判断 refresh_token 有没有
let user = store.state.user
// 2.1 没有 refresh_token
if (!user.refresh_token) {
// 提示
Toast.fail(error.response.data.message)
// 跳转
router.push('/login')
return
}
// 2.2 有 refresh_token => 换取 新的token
try {
let res = await axios({
method: 'put',
url: 'http://toutiao.itheima.net/v1_0/authorizations',
headers: {
Authorization: `Bearer ${user.refresh_token}`,
},
})
console.log(res.data)
// 3 替换本地的token
store.commit('setUser', {
token: res.data.data.token,
refresh_token: user.refresh_token,
})
//4. 把之前 失效的token `请求` ==> 改为用最新的token `请求` 替代 => 继续请求
return request(error.config)
} catch (error) {
// refresh_token 有值 , 但是过期了, 请求失败
router.push('/login')
}
}
return Promise.reject(error)
}
)