vue2.5+中手动刷新页面axios.interceptors.request.use不自动添加token出现跨域

2023-06-01 00:00:00 添加 页面 刷新

问题:

后台管理系统的异步请求中,正常点击请求可以自动添加token,一旦手动F5刷新页面,直接不进入拦截器里面了

vue-axios.png

环境:node+vue

"dependencies": {
    "axios": "^0.21.1",
    "element-ui": "^2.15.6",
    "vue": "^2.5.2",
    "vue-router": "^3.0.1",
    "vuex": "^3.6.2"
},

原因:

我把axios,拦截器 响应器都放在main.js里面,需要移除来


进入步骤

1.src下面新建文件夹utils,文件名称axios.js

import axios from 'axios'
import router from '../router'

//axios.defaults.withCredentials = true

export const request = (config) => {
  return axios(config)
}

// 请求前设置header  添加请求拦截器,在请求头中加token
axios.interceptors.request.use(
  config => {
    if (localStorage.getItem('token')) {
      config.headers.Authorization = localStorage.getItem('token')
    }
    return config
  },
  error => {
    return Promise.reject(error)
  }
)

// 请求完成后 拦截器 token过期或失效处理
axios.interceptors.response.use(
  response => {
    console.log(response)
    return response
  },
  error => {
      // 获取错误状态码,token失效
      // 清除token
      localStorage.removeItem('token')
      // 重新跳转到login页面
      router.push('/login')
  }
)

export default axios


2.在把/utils/axios引入到main.js里面   注意加载顺序

// The Vue build version to load with the `import` command
// (runtime-only or standalone) has been set in webpack.base.conf with an alias.
import Vue from 'vue'
import App from './App'
import router from './router'

import ElementUI from 'element-ui'
import 'element-ui/lib/theme-chalk/index.css'

import axios from './utils/axios'
Vue.prototype.axios = axios

Vue.use(ElementUI)

import '@/styles/index.scss'

Vue.config.productionTip = false

/* eslint-disable no-new */
new Vue({
  el: '#app',
  router,
  components: { App },
  template: '<App/>'
})


看看效果图:

22.png

现在手动刷新都会自动加token头了

token.png


ps:

由axios.defaults.withCredentials = true引起的跨域错误可以直接注销掉;

如果前端设置withCredentials的状况下,后端要设置Access-Control-Allow-Origin为你的源地址,

例如

http://localhost:8080,不能是*,
并且还要设置 
header(‘Access-Control-Allow-Credentials: true’);

另外,Access-Control-Allow-Origin设置为*,时cookie不会出如今http的请求头里

因此报错里说Access-Control-Allow-Origin不能是*。


相关文章