我正在尝试在全局拦截器中处理jwt令牌到期(401)。一旦我得到一个新的令牌,我想重试失败的方法然后调用它然后()。那可能吗?
这是我的拦截器。
ea_axios.interceptors.response.use(undefined, function (error) {
if (error.response){
let res = error.response;
if (res.status === 401 && res.config && !res.config.__isRetryRequest) {
ea_axios.get('/refresh').then(function(response){
Object.assign(eops_axios.defaults, {headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer ' + sessionStorage.accessToken
}});
error.config.__isRetryRequest = true
error.config.headers.Authorization = 'Bearer ' + response.data
return axios(error.config);
}).catch(error => alert(error), reject(error));
} else {
return Promise.reject(error);
}
} else {
return Promise.reject(error);
}
});
我正在使用axios来获取所有get / put / post请求。并且,一旦上面的拦截器获得了新的访问令牌,我需要重试相同的axios方法,然后是()方法。同样明智的是,我有很多需要同样处理的axios调用。
ea_axios.get('/options')
.then(function(response){
if (response.data != undefined && response.data != ''){
response.data.forEach( function(option) {
if (option.optionName == 'applicationCloseDate'){
_this.setState({ applicationCloseDate: option.optionValue });
}
});
_this.setState({ error: false })
}
})
.catch(error => _this.setState({ error: true }));
有人可以建议如何用axios做到这一点吗?