Your Name
2022-04-08 06bc1fdbe81da9a723ad9ee1d3d6dd74025b9e18
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
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