- 首先登陆时,将登陆接口返回的 token 用 localStorage 保存起来,然后在 axios 的请求拦截里将 token 添加到请求头部 header 里,作为之后前后端的通信票据
// axios 请求设置 请求拦截器
axios.interceptores.request.use(config => {
var data = {}
if(typeof(config.data) === 'string'){ // 如果拦截到请求中data 为 string 类型,则执行其中的代码
let str = ` '${config.data}' `
str = str.substring(1, str.length - 1 ) // 提取config.data字符串中第二位 ~ 最后一位之间的字符串
data = JSON.parse(str) // 将提取出来的字符串,转换位 json对象
} else {
data = config.data
}
// 判断是否是登陆和注册接口,因为登陆和注册接口不需要在请求头里加 token
var isLoginRegiste = ['login', 'registe'].indexOf(data.methods) !== -1
if(!isLoginRegiste){
// 如果不是登陆和注册接口,说明用户已经登陆,然后在请求头里添加token
config.headers.token = localStorage.token
}
// 因为 axios 版本问题, 请求拦截必须返回 config
return config;
})
- 在axios 的响应拦截里处理,判断后端接口返回的状态码,根据状态码判断登陆是否超时,如果超时,那么跳转到登陆页面,并且需要清空浏览器的缓存:
import 'router' from 'vue-router'
import { Message } from 'element-ui'
axios.interceptors.response.use(response => {
var data = response.data
if(data.code === 23001) {
// 登陆超时 - 23001
var msg = '登陆超时'
Message({
message: msg,
type: 'error',
duration: 3 * 1000
})
router.push('/login')
// 清除浏览器缓存
localStorage.removeItem('token')
} else {
// 响应正常,返回数据即可
return data
}
})
版权声明:本文为weixin_50723416原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。