zoukankan      html  css  js  c++  java
  • vue请求拦截-统一配置请求头

    /* 直接引入这个文件作为xios 
    import axios from './http' main.js里也要引入
    */
    // import Vue from 'vue'
    import { Toast } from 'vant';
    import axios from "axios"
    import { restUrl as baseUrl } from '@/config'
    import { list } from '@/common/js/url-white-list'
    import { codeHeaders, encryptBody } from '@/common/js/sm.js'
    import router from '@/router'
    import store from '../store'

    axios.defaults.withCredentials = true
    axios.defaults.baseURL = baseUrl


    axios.interceptors.request.use(
    config => {
    let newConfig = config;
    let token = window.localStorage.getItem('access_token')
    if (process.env.VUE_APP_ENCRYPTION === '1') {
    newConfig = codeHeaders(config)
    newConfig = encryptBody(newConfig)
    } else {
    newConfig = config;
    }

    // 不需要token的请求
    for (const i of list) {
    if (newConfig.url.indexOf(i) != -1) {
    return newConfig;
    }
    }
    //设置请求头
    newConfig.headers['Authorization'] = 'Bearer ' + token
    //是否正在刷新token true延迟请求,不是就返回正常的请求头
    const isRefresh = store.state.isRefresh
    if (isRefresh) {
    return new Promise((resolve) => {
    setTimeout(() => {
    let token = window.localStorage.getItem('access_token')
    newConfig.headers['Authorization'] = 'Bearer ' + token
    resolve(newConfig);
    }, 1000);
    })
    } else {
    return newConfig;
    }
    },
    error => {
    // store.dispatch('hideLoading'); //本来是说要加统一的请求loading的 后面各方面考虑没有加
    return Promise.reject(error);
    })

    axios.interceptors.response.use(
    response => {
    // store.dispatch('hideLoading');
    return response
    },
    error => {
    // store.dispatch('hideLoading');
    // // 非法的身份或者身份过期,需要重新登录 // 先退出,在登录 && error.response.config.url.indexOf('/ycloud-user/users/logOut') === -1)
    if (error.response.status !== 400) {
    if (error.response.status === 401) {
    router.push('/login');
    } else if (error.response.status === 403) { // 未授权访问,给用户提示或路由到一个其他错误页面
    router.push('/login');
    } else if (error.response.status === 500 && error.response.data.error == 'Internal Server Error') { // 未授权访问,给用户提示或路由到一个其他错误页面
    if (error.response.data.message === '原始口令校验失败。') {
    Toast({ message: '原始密码输入错误', duration: 2000 });
    } else if (error.response.data.message === '原始口令与新口令不能一样。') {
    Toast({ message: '旧密码和新密码不能重复', duration: 2000 });
    } else {
    return Promise.reject(error);
    }
    } else if (error.response.status === 500 || error.response.status === 503) {
    router.push('/error');
    } else if (error.response.status === 504) {
    router.push('/error');
    Toast({ message: '请求超时,请刷新页面', duration: 2000 });
    } else {
    // Toast({message:'请求异常',duration:5000});
    router.push('/error');
    return Promise.reject(error);
    }
    } else {
    return Promise.reject(error);
    }

    })


    export default axios
  • 相关阅读:
    NOI 模拟赛
    bzoj 4998 星球联盟
    bzoj 4545 DQS 的 Trie
    loj #161 子集卷积
    bzoj 5093 图的价值
    bzoj 4299 Codechef FRBSUM
    NOI 模拟赛
    WC2018 州区划分
    CSP 2020 T2 动物园
    CSP 2020 T1 儒略日
  • 原文地址:https://www.cnblogs.com/dmwcq/p/11180780.html
Copyright © 2011-2022 走看看