我把token放在cookie中,cookie设置略小于后台设置的过期时间,在每次请求前判断cookie是否过期,若过期则先获取新的token再继续请求
checkToken().then(
function(data){
axios.get(url, {
params: params
}).then(function(res) {
callback(res);
}).catch(function(error) {
if(err) {
callback('error');
}
})
}
)
//判断是否需要重新获取token
function checkToken () {
var p = new Promise(function(resolve, reject){
let m_access_token = getCookie('m_access_token');
let refresh_token = getCookie('m_refresh_token');
if(m_access_token){
resolve();
}else{
axios({
method: 'post',
url:paths.loginpath+ '/refreshToken',
data: Qs.stringify({refresh_token:refresh_token})
}).then(function(res) {
addCookie('m_access_token', res.data.access_token,1);
addCookie('m_refresh_token', res.data.refresh_token,2);
resolve();
}).catch(function(error) {
reject();
});
}
});
return p;
};
这样的话有个问题,一个页面打开的请求会不只一个,若打开页面的时候token过期的话就会请求多次刷新token,感觉这样不合理,而且会导致先请求的接口所携带的token过期了
加个锁 大概参考一下