关于Token过期导致页面多个请求报错提示的问题

我们先在全局定义一个变量(global.js)来控制token是否过期

export default {
// token无效标记
TokenInvalidFlag:false
}

在路由拦截器里引入变量来判断是否过期进行判断

//request.js
import axios from 'axios'
import { Message } from 'element-ui'
import store from '../store'
import route from '../router'
import global from '@/utils/const/global'
// create an axios instance
const service = axios.create({
baseURL: '/', // url = base url + request url
withCredentials: true, // send cookies when cross-domain requests
timeout: 1000 * 60 // request timeout
}) // request interceptor
service.interceptors.request.use(
config => {
const token = `${store.state.user.token}` if (token) config.headers['Authorization'] = `Bearer ${token}` config.headers['sn-common'] = `version=v2&app=20200902&channel=web_admin`
store.commit('handleLoading',true);
// get参数编码
if (config.method === 'get' && config.params) {
let url = config.url
if (url.indexOf('?') === -1) {
url += '?'
} else {
url += '&'
}
const keys = Object.keys(config.params)
for (const key of keys) {
if (config.params[key] !== undefined && config.params[key] !== '') {
url += `${encodeURIComponent(key)}=${config.params[key]}&`
}
}
url = url.substring(0, url.length - 1)
config.params = {}
config.url = url
}
return config
},
error => {
console.log(error) // for debug
return Promise.reject(error)
}
) // response interceptor
service.interceptors.response.use(
response => {
if (response.data.code === -22) {
if(global.TokenInvalidFlag===false){
Message.error('登录态失效,请重新登录!');
global.TokenInvalidFlag = true;
store.dispatch('user/signOut').then(() => {
route.push({ name: 'login', params: {redirectFlag: true} })
})
}
} else if (response.status !== 200) {
Message.error(response.message || 'Error')
}else{
global.TokenInvalidFlag = false
}
// 如果是java服务
if(response.config.url.indexOf('/java/api') != -1) {
if (response.data.code != 0) {
Message.error(response.data.message || 'Error')
}
}
store.commit('handleLoading',false);
// Cannot read property 'data' of undefined
return response.data
},
error => {
if (error.response.status === 401) {
if(global.TokenInvalidFlag===false){
Message.error('登录态失效,请重新登录!')
store.dispatch('user/signOut').then(() => {
route.push({ name: 'login', params: {redirectFlag: true} })
});
global.TokenInvalidFlag = true;
} } else {
Message({
message: error.response.data.error_message,
type: 'error',
duration: 5 * 1000
})
}
store.commit('handleLoading',false);
return Promise.reject(error)
}
) export default service

最新文章

  1. SQLSERVER 数值 四舍五入取整 向上取整 向下取整
  2. MS SQLServer 操作XML语句的存储过程
  3. Ubuntu 12 修改环境变量
  4. mysqldump备份详解
  5. Careercup | Chapter 8
  6. Ip 地址
  7. poj 2186 Popular Cows【tarjan求scc个数&&缩点】【求一个图中可以到达其余所有任意点的点的个数】
  8. ACM题目推荐(刘汝佳书上出现的一些题目)[非原创]
  9. unity3d 学习笔记(两)
  10. 添加MySql Metat Database 信息
  11. Bash扩展顺序
  12. 【linux之进程管理,系统监控】
  13. scala的多种集合的使用(6)之映射Map的操作方法
  14. 【朝花夕拾】Android性能篇之(二)Java内存分配
  15. HTTP 常见的状态码
  16. HDFS副本放置策略
  17. Java高级教程
  18. [Python]多线程入门
  19. 【DB2】查看表空间对应的物理文件地址
  20. 题目1076:N的阶乘(大数乘法)

热门文章

  1. 关于ie浏览器query ajax提交单个操作无效
  2. 「SOL」网络流flow (模拟赛)
  3. ES5 绑定 this 的方法
  4. 商城登录/三方登录OAUTH2/单点登录
  5. CH583 是集成 BLE 无线通讯的 RISC-V MCU 微控制器
  6. ThinkPHP获取当前url
  7. C# VS2019修改工程名
  8. WPF materialDesign 锁屏后界面卡死问题解决
  9. iOS笔记 - Runtime 01:前期准备(isa结构 | Class结构 | 方法缓存)
  10. 从零搭建hadoop集群之系统管理操作