25.前端axios拦截器

 一刷新前端报错了,以前我们登录成功了也不需要校验,要数据后端就给我们,现在不行了,必须传入token,那现在我们哪有token值,因为我们要请求一些数据,所以直接请求的话就报401错误,也就是我们在后端自己写的,现在我们后端改好了,前端还没开始。

 从前端发起的所有axios请求都应该携带上我们的token,而这个token是在我们登入成功之后就应该拿到的。后端使用了拦截器,我们前端也有类似于发请求的拦截器,那就是使用第三方的库axios。axios的好处就是它的封装性、使用便利。那这里axios有一个高阶的使用方法就是我们用axios拦截器在请求之前我们会读取我们本地存储的token,把它拼到那个请求参数上,那在回来了之后我们会获取到我们的token,如果有的话存到我们的localstore中。如果我们这个token返回的告诉我们是401的错误的话我们就直接重定向当我们的login页面去就可以了。

1.使用axios的拦截器

GitHub - axios/axios: Promise based HTTP client for the browser and node.js

 把它们放在一个公共的文件中配置axios

 全局导入拦截器

接下来写我们的交互代码了。

我们正常登录之后,我们应该获取到那个token,就跟之前在后端一样的,我们在拦截器里面统一的进行存取token并且判断401进行返回。

2、

2.1、获取真实数据

我们可以看到token是在data里面的,所以我们要获取token的话就是.data.token

2.2、 获取token并存储token

 万一其他接口没有data属性,那res.data这里拿到的就underfinded,在.token就一定报错,所以为了保险起见的话,我们需要使用ES6的一种处理方案,在res和date后面加上“”这种写法。就是如果res为假就不再.data了。如果.data为假的话就不再.token了。

 然后我们再重新登录一下。那我们就能在登录成功的时候拿到这个token值,而其他的将来成功的话将来没有data没有token也不用担心,因为这个res?.data?.token值为假,所以取出来也不会再报错,那我们就靠这个东西是真是假再与“&&”上这个操作把token存到我们的本地存储中,这样的话我们在发请求之前再把它去出来。

 只要我们成功响应之后,不管是登录成功还是后来的获取实验室获取侧边栏成功等等的,我们都走这个响应没有问题,而我们会在这里进行处理,拿到token。如果有的情况下我们再进行localStorage的一个存储,如果没有的话也不会去存了。这样写完之后我们至少会在本地存储中存到token。

 2.3、取出token

存上token之后,我们以后每次在请求之前的话我们要在localStorage.setItem中取出token。

 如果一开始没有的话取出来的这个token就是underfinded,那这样我们携带的这token字段拼上去再给后端发过去。

注意:这就是我们所说前端要给后端发请求的时候在header中有一个token字段,把这个token的信息传给我们的后端。

这就是我们前端的一个写法,token字符串放在我们config对象中,config是我们的一个前端发请求之前的一个配置对象,直接return它就会按照这个对象进行请求。

 本地存储中有token了,我们也就获取它其他的数据了。

 2.4、token过期失效处理

一旦token过期或者被修改再把它携带给后端的话,那这个后端校验发现这个token是无效的返回了401,我们就会走响应的一个拦截器,那我们现在就进行处理token失效。

 先取出status再判断如果它等于401的时候就重定向,重定向之前先把过期失效token给删除掉。

由于我们现在这个axios.config.js是脱离我们整个路由配置的,所以我们就不用之前的view路由重定向,我们直接用最原始的 window.localStorage这种方式重定向到login页面

猜你喜欢

转载自blog.csdn.net/m0_65436732/article/details/133622506
今日推荐