401错误 解决方法:响应拦截器
关于401错误
401错误场景
1. 用户未登录,代码报401,应该回到登录页
2. 登录用户的token过期 :
怎样理解token过期?
. 就是登录成功了以后,后端会返回一个token值,这个值在后续请求时带上(就像是开门钥匙),
但是,这个值一般会有有效期(具体是多长,是由后端决定)token过期是为了安全起见
refresh_token
说明 : 当用户登陆成功之后,返回的token中有两个值
图示说明:
作用:
响应拦截器
说明
响应拦截器可以解决401错误
响应拦截器的功能
所有从后端回来的响应都会集中进入响应拦截器中,如果发生401错误就可以解决
图示说明
代码演示
import router from '../router/auth.js'// 响应拦截器
request.interceptors.response.use(function (response) {console.log('响应拦截器', response)return response
}, async function (error) {// 如果发生了错误,判断是否是401console.dir(error)if (error.response.status === 401) {// 出现401就在这里面 开始处理 ---console.log('响应拦截器-错误-401')const refreshToken = store.state.tokenInfo.refresh_token// if (有refresh_token) { ---- 有refresh_tokenif (refreshToken) {// 1. 请求新tokentry {const res = await axios({url: 'http://localhost:8000/v1_0/authorizations',method: 'PUT',headers: {Authorization: `Bearer ${refreshToken}`}})console.log('请求新token', res.data.data.token)// 2. 保存到vuexstore.commit('mSetToken', { // mSetToken是前面定义的mutations名字refresh_token: refreshToken,token: res.data.data.token})// 3. 重发请求// request是上面创建的axios的实例,它会自动从vuex取出token带上return request(error.config)} catch (error) {// 1. 清除tokenstore.commit('mSetToken', {}) // 2. 去到登录页(如果有token值,就不能到login)const backtoUrl = encodeURIComponent(router.currentRoute.fullPath)router.push('/login?backto=' + backtoUrl) return Promise.reject(error) }} else {// 如果没有refresh_token的时候 ----没有refresh_token// 1.去到登录页// 2.清除tokenstore.commit('mSetToken', {})const backtoUrl = encodeURIComponent(router.currentRoute.fullPath) // 回到原来跳过来的的页面,不加?后面的一串就会到首页router.push('/login?backto=' + backtoUrl)return Promise.reject(error) // 返回错误信息}} else {return Promise.reject(error)}
})
原理
它的执行顺序是: 请求接口 --> 发生401报错 --> 判断是否有refresh_token -->如果有就用fresh_token请求新的token --> 后台成功返回一个新的token给我们 --> 更新vuex --> 然后重新发送请求 --> 带上新的token请求数据
如果是异常情况: 就是没有fresh_token的情况
401错误 解决方法:响应拦截器相关推荐
- 前端401错误 解决方法:响应拦截器
目录 1.该问题出现的原因 2.处理401问题的解决方案原理 3.使用响应拦截器解决问题 1.该问题出现的原因 在前后端分离项目中,最常见的是前端点击登录后,后端返回token字符串,这个token可 ...
- axios的使用(请求,响应拦截器)
axios的使用 本篇博客简要讲述本人在前端vue开发过程中对于axios的理解 文章目录 axios的使用 前言 一.axios是什么? 二.使用步骤 1.引入库 2.axios使用 1,引用axi ...
- vue 项目 axios 响应拦截器 统一判断401 (登录)过期
背景: 为了模拟token 过期,专门把token 设置错误,为401 界面 把axios 官网里的 复制到拦截器里 放置到request.js 里 在响应器里进行判断4**, 5** 状态码错误 ...
- axios的响应拦截器 - 错误统一处理 / 获取数据繁琐
1. 问题 登录时,填写错误的用户名密码,没有错误提示(没有进入catch分支) 获取ajax的返回结果比较麻烦:res.data.data.xxxx 2.解决登录失败不报错的问题 2.1 分析原因 ...
- 王者荣耀体验服什么叫服务器未响应,王者荣耀体验服登陆不进去怎么回事 体验服版本错误解决方法...
今天想必很多有想玩体验服,进去尝试下新英雄梦奇的玩家,不过点进去后,发现提示版本错误,那么体验服在今天一直进不去是怎么回事呢,版本错误,退出后再次重进,也是错误,这是什么情况呢,其实是由于本次更新耗时 ...
- axios 请求拦截器响应拦截器
一. 拦截器介绍 一般在使用axios时,会用到拦截器的功能,一般分为两种:请求拦截器.响应拦截器. 请求拦截器 在请求发送前进行必要操作处理,例如添加统一cookie.请求体加验证.设置请求头等,相 ...
- 快速了解AngularJs HTTP响应拦截器
任何时候,如果我们想要为请求添加全局功能,例如身份认证.错误处理等,在请求发送给服务器之前或服务器返回时对其进行拦截,是比较好的实现手段. angularJs通过拦截器提供了一个从全局层面进行处理的途 ...
- 如何使用 Axios 中的请求拦截器 和响应拦截器
Axios 是一个常用的 JavaScript 库,用于发送 HTTP 请求和处理响应.在网站设计中,我们可以使用 Axios 请求拦截器和响应拦截器来实现一些常见的需求,例如添加认证信息.处理错误信 ...
- axios的响应拦截器
一.拦截器介绍: 一般在使用axios时,会用到拦截器的功能,一般分为两种:请求拦截器.响应拦截器 请求拦截器: 在请求发送前进行必要操作处理,例如添加统一cookie.请求体加验证.设置请求头等,相 ...
最新文章
- 非对称加密和证书总结
- 未来已来——工作空间WorkSpace和物联网IoT (3)
- 《深入理解Java虚拟机》笔记5——类加载机制与字节码执行引擎
- 【干货下载】金融大数据专场沙龙内容分享
- html自动轮播计时器不准,用jQuery写的图片轮播为何停止定时器只能停止一次?...
- 前端学习(3251):样式的模块化
- VS2010 MFC 使用GDI+给图片添加汉字
- VMware 披露严重0day,影响Workspace One 的多个组件
- Visual Tracker Benchmark
- oracle密码过期之后如何修改成永久不过期
- 手机也可以接USB摄像头了
- python矩形法求定积分_c程序用矩形法编一个通用函数求定积分0到1区间sinx,cosx,e的x次方,1+x,2x+3,(x*x)+1,e的x次方+1,(1+X)*(1+X),x*x*x...
- 关于Kotlin循环遍历需要注意索引越界的问题
- ubuntu20.04系统安装谷歌浏览器
- 大数据实战第十二课之-Scala知识05
- python爬虫爬取网易云热歌榜top200
- 微信网页程序开发,如何解决后退时重复登录的问题
- 学人工智能必备的数学课,再也不怕学AI了
- oracle中正则表达式规则,Oracle SQL 正则表达式
- F5(负载均衡)使用配置文档
热门文章
- idea移动一行或一个方法的快捷键
- 牛奶布丁,我也会做了-o-
- 单细胞论文记录(part11)--ClusterMap for multi-scale clustering analysis of spatial gene expression
- matlab视频帧间差分法,帧间差分法matlab代码
- jmcc(jmc车型)
- Assembly.LoadFrom函数报错“尝试从一个网络位置加载程序集,在早期版本的 .NET Framework 中,这会导致对该程序集进行沙盒处理...”
- 第十三届蓝桥杯c++b组痛失国一复盘
- HP ElitedeskProDesk更新win10十月更新蓝屏 WDF VIOLATION
- RecycleView和ViewPager冲突解决与原理
- nodejs购物系统app-计算机毕设 附源码 90766