通过请求拦截器和响应拦截器来设置在接口请求头中携带token

axios.interceptors.request.use(
    config => {
        // do something before request is sent
        config.headers['Accept'] = 'application/json'
        config.headers['Accept-Language'] = getLanguage()
        config.headers['Content-Type'] = 'application/json; charset=utf-8'
        config.headers['channel'] = '3S'
        if (getToken()) {
          config.headers['Authorization'] = 'Bearer ' + getToken()
        }
        return config
      },
      error => {
        // do something with request error
        console.log(error) // for debug
        Message.error(error)
        return Promise.reject(error)
      }
)
axios.interceptors.response.use(

    response => {
        if (response.headers && response.headers.access_token) {
          setToken(response.headers.access_token)
        }
        const res = response.data
        if (response.request.responseType === "blob") {
          const blob = new Blob([res], { type: response.headers["content-type"] })
    
          const href = URL.createObjectURL(blob)
          const a = document.createElement('a')
          a.style.display = 'none'
          a.href = href
          a.download = response.headers.filename
          a.click()
          URL.revokeObjectURL(href)
        } else if (response.request.responseType === "arraybuffer") {
          return response
        }
        // if the custom code is not 20000, it is judged as an error.
        if (res.code !== '0') {
          // 50008: Illegal token; 50012: Other clients logged in; 50014: Token expired;
          if (res.code === 50008 || res.code === 50012 || res.code === 50014) {
            // to re-login
            Modal.warning({
                title:'Confirm logout',
                content:'You have been logged out, you can cancel to stay on this page, or log in again',
                okText: 'Re-Login',
                cancelText: 'Cancel',
                onOk:function() {
                }
            })
          } else if (res.code === undefined) {
            return res
          } else if (res.code === "duplicate_doc_no") {
            return res
          } else if (res.code === "choice_not_found") {
            return res
          } else if (res.code === 'holiday_camp_information_code_duplicated') {
            return res
          } else {
            Message.error(res.message || "Error")
            return Promise.reject(new Error(res.message || 'Error'))
          }
        } else {
          return res
        }
      },
      error => {
        console.log(error)
        if (error.response.status === 401) {
          removeToken()
          return
        }
        Message({
          message: error.message,
          type: 'error',
          duration: 5 * 1000
        })
        return Promise.reject(error)
      }
);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值