郑永安
2023-06-19 c8188c0fc9edf6ea3feda5b6f11dcb014af2a89e
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
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
import axios from 'axios';
import { MessageBox, Message } from 'element-ui';
import store from '@/store';
import { getToken,removeSsoToken } from '@/utils/auth';
 
// create an axios instance
axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';
const service = axios.create({
  baseURL: '/api/', // url = base url + request url
  // withCredentials: true, // send cookies when cross-domain requests
  timeout: 5000 // request timeout
});
 
// request interceptor
service.interceptors.request.use(
  config => {
    // do something before request is sent
 
    if (store.getters.token) {
      // let each request carry token
      // ['X-Token'] is a custom headers key
      // please modify it according to the actual situation
      config.headers['X-Token'] = getToken();
      config.headers['Set-Cookie'] = getToken();
    }
 
    return config;
  },
  error => {
    // do something with request error
    console.log(error); // for debug
    return Promise.reject(error);
  }
);
 
// response interceptor
service.interceptors.response.use(
  /**
   * If you want to get http information such as headers or status
   * Please return  response => response
   */
 
  /**
   * Determine the request status by custom code
   * Here is just an example
   * You can also judge the status by HTTP Status Code
   */
  response => {
    const res = response.data;
 
    if (!res) {
      Message({
        message: '网络出错,请稍后重试',
        type: 'error',
        duration: 5000
      });
    }
 
    if (res && !res.false && res.errorCode === 'login_session_expire_faiture_001') {
      // to re-login
      Message({
        message: '登录状态已失效,请重新登录',
        type: 'error',
        duration: 5000
      });
 
      store.dispatch('user/resetToken').then(() => {
        location.reload();
      });
      // to re-login
      // MessageBox.confirm(res.errorMsg, '确认登录', {
      //   confirmButtonText: '重新登录',
      //   type: 'warning',
      //   showClose: false,
      //   showCancelButton: false,
      //   closeOnClickModal: false
      // }).then(() => {
      //   store.dispatch('user/resetToken').then(() => {
      //     location.reload();
      //   });
      // });
      return null;
    }
 
    return typeof res === 'object'
      ? res
      : {
          result: true,
          token: res
        };
 
    // if the custom code is not 20000, it is judged as an error.
    // if (res.code !== 20000) {
    //   Message({
    //     message: res.message || 'Error',
    //     type: 'error',
    //     duration: 5 * 1000
    //   })
 
    //   // 50008: Illegal token; 50012: Other clients logged in; 50014: Token expired;
    //   if (res.code === 50008 || res.code === 50012 || res.code === 50014) {
    //     // to re-login
    //     MessageBox.confirm('You have been logged out, you can cancel to stay on this page, or log in again', 'Confirm logout', {
    //       confirmButtonText: 'Re-Login',
    //       cancelButtonText: 'Cancel',
    //       type: 'warning'
    //     }).then(() => {
    //       store.dispatch('user/resetToken').then(() => {
    //         location.reload()
    //       })
    //     })
    //   }
    //   return Promise.reject(new Error(res.message || 'Error'))
    // } else {
    //   return res
    // }
  },
  error => {
    const statusCode = error.response.status;
    if(statusCode === 401){
        removeSsoToken();
        console.log('response is' + error.response);
        const locationUrl = error.response.headers['locationUrl'];
        console.log('location is ' + locationUrl);
        const currentUrl = window.location.href;
        window.location.href = locationUrl + '?returl=' + encodeURIComponent(currentUrl);
    }
    console.log('err' + error); // for debug
    Message({
      message: error.message,
      type: 'error',
      duration: 5 * 1000
    });
    return Promise.reject(error);
  }
);
 
export default service;