You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
iot/projects/Platform/wwwroot/js/axios.js

63 lines
2.5 KiB

axios.defaults.timeout = 1000 * 10;
axios.interceptors.request.use(
function (config) {
if (config.method === 'post' && config.url.indexOf('/getToken') === -1 && config.url.indexOf('/refreshToken') === -1) {
if (store.state.token.accessToken) {
config.withCredentials = true;
config.headers['Authorization'] = 'Bearer ' + store.state.token.accessToken;
}
}
loading.show();
return config;
},
function (error) {
loading.hide();
console.error(error);
return Promise.reject(error);
}
);
axios.interceptors.response.use(function (response) {
loading.hide();
return response;
}, function (error) {
loading.hide();
console.error(error);
if (error.response) {
if (error.response.status === 401) {
if (store.state.token.refreshToken && error.config.url.indexOf('refreshToken') > -1) {
var url = config.service('platform/api/v1/token/refreshToken')
var data = '"' + store.state.token.refreshToken + '"';
return axios.post(url, data, { headers: { 'Content-Type': 'application/json;charset=UTF-8' } })
.then(function (response) {
store.commit('login', response.data);
error.config.headers['Authorization'] = 'Bearer ' + store.state.accessToken;
console.log('redo request after refresh token');
return axios(error.config);
})
.catch(function (error) {
if (error.response.status === 401) {
store.commit('logout', response.data);
console.log('refreshToken 已过期');
router.push('components/views/areas/default/login.vue');
}
else {
console.error(error);
}
});
}
else {
store.commit('logout', response.data);
router.push('components/views/areas/default/login.vue');
}
}
else if (error.response.status === 403) {
//alert
}
}
else {
if (error.message.indexOf('timeout') !== -1) {
Swal.fire({ title: '请求超时,请返回重试', timer: 1500 });
}
}
return Promise.reject(error);
});