import axios from 'axios'
|
import { Message } from 'element-ui'
|
import store from '@/store'
|
import { getToken, removeToken } from '@/utils/auth'
|
import { asyncRouterMap } from '../router'
|
import Router from 'vue-router'
|
import router from '../router'
|
import Cookies from 'js-cookie'
|
|
// create an axios instance
|
const service = axios.create({
|
// baseURL: process.env.BASE_API+'/v1/api', // api 的 base_url
|
timeout: 1000000, // request timeout,
|
// 设置跨域请求为true,如果是cros同源请求的话,则可以不用加此项
|
withCredentials: false,
|
headers: {
|
// 'X-Requested-With': 'XMLHttpRequest',
|
// 'Content-Type': 'application/json;charset=UTF-8',
|
// 'Authorization': getToken()
|
},
|
responseType: 'json'
|
})
|
|
/* 是否有请求正在刷新token*/
|
window.isRefreshing = false
|
/* 被挂起的请求数组*/
|
const refreshSubscribers = []
|
|
/* push所有请求到数组中*/
|
function subscribeTokenRefresh(cb) {
|
refreshSubscribers.push(cb)
|
}
|
|
/* 刷新请求(refreshSubscribers数组中的请求得到新的token之后会自执行,用新的token去请求数据)*/
|
function onRrefreshed(token) {
|
refreshSubscribers.map(cb => cb(token))
|
}
|
|
/* 判断token是否过期*/
|
function isTokenExpired() {
|
/* 从cookies中取出token过期时间*/
|
const expiredTime = new Date(parseInt(Cookies.get('token_expired_at')) * 1000).getTime() / 1000
|
/* 获取本地时间*/
|
const nowTime = new Date().getTime() / 1000
|
/* 获取校验时间差*/
|
// let diffTime = JSON.parse(sessionStorage.diffTime)
|
/* 校验本地时间*/
|
// nowTime -= diffTime
|
/* 如果 < 10分钟,则说明即将过期*/
|
return (expiredTime - nowTime) < 10 * 60
|
}
|
|
/* 判断token是否过期*/
|
function isRefreshTokenExpired() {
|
/* 从cookies中取出token过期时间*/
|
const expiredTime = new Date(parseInt(Cookies.get('token_expired_at')) * 1000).getTime() / 1000
|
/* 获取本地时间*/
|
const nowTime = new Date().getTime() / 1000
|
/* 获取校验时间差*/
|
// let diffTime = JSON.parse(sessionStorage.diffTime)
|
/* 校验本地时间*/
|
// nowTime -= diffTime
|
/* 如果 < 0分钟,则说明即将过期*/
|
return (expiredTime - nowTime) <= 0
|
}
|
|
// service.interceptors.request.use(
|
// config => {
|
// //console.log( router.app._route.meta,'Router.meta')
|
// // Do something before request is sent
|
// config.headers['Authorization'] = getToken()
|
// return config
|
// },
|
// error => {
|
// console.log(error) // for debug
|
// Promise.reject(error)
|
// }
|
// )
|
|
// response interceptor
|
service.interceptors.response.use(
|
response => response,
|
error => {
|
if (error.response && error.response.status === 403) {
|
Message({
|
message: '登录过期请重新登录!',
|
type: 'error',
|
duration: 5 * 1000
|
})
|
store.dispatch('FedLogOut').then(() => {
|
window.location.href = '#/login'
|
})
|
// Router.replace('/')
|
} else {
|
console.log(error.message)
|
// Message({
|
// message: error.message,
|
// type: 'error',
|
// duration: 5 * 1000
|
// })
|
}
|
|
return Promise.reject(error)
|
}
|
)
|
|
export default service
|