axios.interceptors.request.use设置POST有效,GET不生效

发布于 2022-09-12 00:48:11 字数 1565 浏览 18 评论 0

我的axios设置:

import axios from 'axios'
import store from '../store/index'
import * as types from '../store/mutation-types'
import router from '../router'

// axios 配置
axios.defaults.timeout = 5000
axios.defaults.baseURL = '/agent/web'

// http request 拦截器
axios.interceptors.request.use(
  config => {
    if (store.state.token) {
      config.headers.Authorization = store.state.token
    }
    return config
  },
  err => {
    return Promise.reject(err)
  },
)

// http response 拦截器
axios.interceptors.response.use(
  response => {
    return response
  },
  error => {
    if (error.response) {
      switch (error.response.status) {
        case 401:
          // 401 清除token信息并跳转到登录页面
          store.commit(types.LOGOUT)
          
          // 只有在当前路由不是登录页面才跳转
          router.currentRoute.path !== 'login' &&
            router.replace({
              path: 'login',
              query: { redirect: router.currentRoute.path },
            })
      }
    }
    return Promise.reject(error.response.data)
  },
)

export default axios

所有的POST都很正常,会带上token,但是所有的GET都不正常,比如:
this.axios.get('/logout.html') 出现了401.检查request的headers,发现没有带上Authorization的值,继续追查下去,发现应该是if (store.state.token)这句判断在GET的时候与POST的时候不一样,不知道是为什么.
store.state.token是保存VUEX里字符串.
现在的暂时替代方案是在所有的get方法里,都自行带上token

let token = this.$store.state.token
        this.axios.get('/logout.html', {
          params:{},
          headers: {
            'Authorization': token
          }
        })

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

々眼睛长脚气 2022-09-19 00:48:11

还在用0.18.0,是因为axios的问题吗?

灵芸 2022-09-19 00:48:11

你用get请求的时候,在axios.interceptors.request.use打印store.state.token的值试试看,是不是空值

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文