123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165 |
- import axios from 'axios'
- import {
- getToken,
- removeToken,
- getRefreshToken,
- setRefreshToken,
- setToken
- } from '@/utils/auth'
- import {
- anonUrls
- } from '@/utils/config'
- import {
- getAuthToken
- } from "../api/login";
- // 创建axios实例
- const service = axios.create({
- baseURL: '/api/', // api的base_url
- timeout: 15000, // 请求超时时间
- headers: {
- "Pragma": "no-cache",
- "Cache-Control": "must-revalidate",
- "Cache-Control": "no-cache",
- "Cache-Control": "no-store",
- }
- })
- const notSetAuthHeaderUrls = anonUrls;
- // request拦截器
- let getTokenByRefreshToken = false;
- let retryRequests = [];
- service.interceptors.request.use(config => {
- console.log('12321312312-----', config);
- // debugger
- if (!config.headers.ANON && needSetAuthHead(config.url)) {
- // config.headers['Auth'] = getToken() // 让每个请求携带自定义token 请根据实际情况自行修改
- // config.headers['Authorization'] = 'Bearer ' + getToken()
- config.headers['Authorization'] = 'Bearer ' + getToken()
- }
- return config
- }, error => {
- // Do something with request error
- console.log(error) // for debug
- Promise.reject(error)
- })
- // respone拦截器
- service.interceptors.response.use(
- response => {
- /**
- * code为非20000是抛错 可结合自己业务进行修改
- */
- if (response['headers']['content-disposition']) {
- const data = response.data;
- var fileName = response['headers']['content-disposition'].split(";")[1].split("filename=")[1];
- var index = fileName.lastIndexOf("\"");
- if (index == fileName.length - 1) {
- var start = 0;
- if (fileName.indexOf("\"") == 0) {
- start = 1;
- }
- fileName = fileName.substring(start, index);
- }
- return {
- data,
- fileName
- }
- }
- if (response['headers']['captcha-uid']) {
- return response;
- }
- const res = response.data;
- if (res['access_token'] || !res.status) {
- return response.data;
- }
- if (res.status != 200) {
- if (res.status == 401) {
- removeToken();
- // router.push({
- // path: '/login',
- // })
- } else {
- msg(res.msg);
- }
- return Promise.reject(res)
- } else {
- return response.data
- }
- },
- error => {
- const config = error.config;
- if (config.url == '/api/./uua/oauth/token') {
- removeToken();
- closeLoading();
- router.push({
- path: '/login',
- })
- return;
- }
- if (error && error.response) {
- if (error.response.status == 401) {
- if (!getTokenByRefreshToken) {
- let p = new Promise((resolve) => {
- retryRequests.push((token) => {
- config.baseURL = '';
- config.headers['Authorization'] = 'Bearer ' + token;
- resolve(service(config));
- })
- });
- getTokenByRefreshToken = true;
- getAuthToken(getRefreshToken()).then(res => {
- if (res.hasOwnProperty('access_token') && res.access_token) {
- setToken(res['access_token']);
- setRefreshToken(res['refresh_token']);
- retryRequests.forEach(cb => cb(getToken()));
- retryRequests = [];
- }
- }).catch(error => {
- removeToken();
- closeLoading();
- router.push({
- path: '/login',
- })
- }).finally(() => {
- getTokenByRefreshToken = false;
- });
- return p;
- } else {
- return new Promise((resolve) => {
- retryRequests.push((token) => {
- config.baseURL = '';
- config.headers['Authorization'] = 'Bearer ' + token;
- resolve(service(config));
- })
- });
- }
- } else if (error.response.status == 403) {
- msg("无权访问");
- } else if (error.response.status == 500) {
- msg("系统繁忙,请稍后再试");
- }
- }
- // store.dispatch('user/LOGOUT').then(() => {
- // //location.reload()// 为了重新实例化vue-router对象 避免bug
- // })
- // Message({
- // message: error.message,
- // type: 'error',
- // duration: 5 * 1000
- // })
- return Promise.reject(error)
- }
- )
- const needSetAuthHead = (url) => {
- return notSetAuthHeaderUrls.indexOf(url) == -1;
- }
- const msg = (msg) => {}
- /* eslint-disable no-proto */
- service.__proto__ = axios
- /* eslint-enable */
- export default service
|