Vue中登陆超时,返回登陆页面

  1. 首先登陆时,将登陆接口返回的 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;
})
  1. 在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版权协议,转载请附上原文出处链接和本声明。