根据refreshToken刷新Token
问题描述:axios使用token访问时,token如果失效,则需要使用refreshToken来刷新Token得到新的Token
这时可以考虑在axios的响应后,对状态做处理,
处理逻辑:返回响应token后显示失效——>使用refreshToken接口,刷新token——>对refreshToken接口的返回数据做处理——>再次访问显示token失效的接口
instance.interceptors.response.use(
function (response) {
// 对返回的数据处理
// 条件判断
if (response.data !== null ) {
if (response.data.message.match(RegExp("token expired"))) {
//刷新接口可自己定义
return refreshToken()
//对refresh接口返回进行处理
.then((res) => {
//如果请求成功,则刷新成功
if (res.data.status === 1) {
setToken(res.data.token);
//再次请求以前请求失效的借口
return axios({
method: response.config.method,
data: response.config.data,
url: response.config.url,
baseURL: response.config.baseURL,
headers: {
Authorization: `${getToken()}`,
},
})
.then((res) => {
return res.data;
})
.catch((error) => {
message.error("网络连接错误");
});
}
//如果刷新token的请求失败,则表示refreshToken失效或者错误,则请用户自己重新登录
if (res.data.status === 0) {
message.error("token无效,请重新登陆");
}
})
.catch((error) => {
message.error("网络连接错误");
});
}
}
return response.data;
},
);
//刷新token接口
function refreshToken() {
return axios({
method: "get",
url: `refresh_token?refresh_token=${getrefresh_token()}`,
});
}
在实际的使用中可能会遇到再次携带失效token时config会乱码的问题,这个问题将在下一个博客里说明。