Token过期导致页面多个请求报错提示多次
关于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
Token过期导致页面多个请求报错提示多次的更多相关文章
- JS请求报错:Unexpected token T in JSON at position 0
<?php /* 最近做一个ajax validate表单验证提交的代码,在ajax提交的时候 JS请求报错:Unexpected token T in JSON at position 0 描 ...
- 【转】JSON.parse() Unexpected token i in JSON at position 2 报错问题
JSON.parse(): Unexpected token i in JSON at position 2 报错问题 错误代码: var res = "[{id:1,name:'limin ...
- nuget包管理nuget服务器发布包时出现请求报错 406 (Not Acceptable)
在window服务器上部署nuget服务器时,发布包时出现请求报错 406 (Not Acceptable) 验证用户名.密码正确的情况下,还是出现上面错误.后面跟踪服务器日志,发现window\te ...
- Xcode7 beta 网络请求报错:The resource could not be loaded because the App Transport Security policy requires the use of a secure connection.
Xcode7 beta 网络请求报错:The resource could not be loaded because the App Transport Xcode7 beta 网络请求报错:The ...
- Xcode7 beta 网络请求报错:The resource could not be loaded because the App Transport
Xcode7 beta 网络请求报错:The resource could not be loaded because the App Transport Xcode7 beta 网络请求报错:The ...
- git https 请求报错 504
git https 请求报错 504 原因可能是因为设置了代理,ubuntu/deepin 系统可以检查 /etc/profile ~/.bashrc 内有没有设置 https 的代理. 有的话,去掉 ...
- Android版本28使用http请求报错not permitted by network security policy
Android版本28使用http请求报错not permitted by network security policy android模拟器调试登录的时候报错 CLEARTEXT communic ...
- 页面白屏并且报错PHP Parse error: syntax error, unexpected end of file in 试了很久总算解决了
页面白屏并且报错PHP Parse error: syntax error, unexpected end of file in 试了很久 啥短标记,打开,都试了 最简单的办法 是重新建立一个文件, ...
- mac下连接本地安装的mysql报错提示密码过期
前提: mac中之前安装了mysql,一段时间没使用,今天使用mysql客户端去连接,报错提示密码过期,原因是mysql5.7之后版本有密码过期这个功能. error: Your password h ...
- 【js监听报错】页面监听js报错问题
<html> <head> <script type="text/javascript"> // 页面监听js报错问题 onerror=hand ...
随机推荐
- react lodash节流this找不到正确用法
if (!this.throttleLoadDicom) { this.throttleLoadDicom = throttle(this.loadDicomFun, 800, { leading: ...
- OS-lab1
OS-lab1 boot boot文件夹中只有start.S文件,这个文件用于初始化内核.关掉中断,设置内核栈,并跳转到main函数. init init.c 执行初始化操作. main.c 主函数, ...
- Python的入门学习Day 28~30——form”夜曲编程“
Day 28 in Day 29 time: 2021.8.26. 时间模糊了界限,虽我日渐走远.转眼而过的二十多天,既留下了夏天在沙滩上的足迹,同时也为黄金色的秋日铺上留白的画卷.键盘敲时,熟悉 ...
- 移动web_平面转换
平面转换 平面 平移 旋转 缩放 概念:使用transform属性实现元素的位移.旋转.缩放等效果 注意点:行内元素所有的平面转换是没有效果的 平面: 平面转换的平面指的是二维平面(2D)只有X和Y轴 ...
- 冒泡排序快速排序C语言
//冒泡排序 void BubbleSort(ElemType A[], int n) { int i, j, temp; int flag=1; for (i = 1; i <= n - 1& ...
- Neo4J之Cypher 第三章
Cypher是一种声明式图形查询语言,可用于表达性和高效的图形查询和更新.它旨在同时适合开发人员和运营专业人员.Cypher的设计既简单又强大.可以轻松表达高度复杂的数据库查询,使您可以专注于自己的域 ...
- 「部署日记」Android Studio乱码解决方案
弄了一台新电脑,第一件事肯定是弄好打造台啦 于是VS.AS.CRD.NSIS.Adobe全家桶全安装完毕, 问题来了,在打开Android Studio时,出现乱码,比如 这样的: 这样的: 这样的: ...
- springboot启动日志:Multiple Spring Data modules found, entering strict repository configuration mode
问题描述 最近启动springboot项目的时候,发现有一条日志:Multiple Spring Data modules found, entering strict repository conf ...
- Wix打包升级包
前面我们已经知道怎么制作一个完整安装包了,但我们的软件往往不能一次性就满足客户的需要,当客户需要我们给软件进行升级的时候,我们应该怎么做呢? 在这之前,我们有必要了解下Windows Installe ...
- C# RGB转Brush
C#中自定义一个Brush,使用Color赋RGB值给Brush: dataGrid2.HorizontalGridLinesBrush = new SolidColorBrush(System.Wi ...