<强>项目背景强>
最近在项目开发中,遇到下面这样一个问题:
-
<李>在进行铭感操作之前,每个请求需要携带令牌,但是令牌有有效期,令牌失效后需要换取新的令牌并继续请求。李>
需求分析
-
<李>每个请求都需要携带令牌,所以我们可以使用axios请求拦截器,在这里,我们给每个请求都加标记,这样就可以节省每个请求再一次次的复制粘贴代码。李>
<李>牌失效问题,当我们令牌失效,我们服务端会返回一个特定的错误表示,比如令牌无效,但是我们不能在每个请求之后去做刷新令牌的操作呀,所以这里我们就用axios响应拦截器,我们统一处理所有请求成功之后响应过来的数据,然后对特殊数据进行处理,其他的正常分发。李>
<强>功能实现强>
分析完问题后,我们来实现功能
安装axios,这里我们就赘述怎么安装axios。
在主要。js注册axios
Vue.use (Vuex) Vue。使用(VueAxios axios) Vue.use (qs)
注:qs,使用axios,必须得安装qs,所有的帖子请求,我们都需要qs,对参数进行序列化。
在请求拦截器实现
axios.interceptors.request.use ( 配置=比;{ 配置。baseURL='/api/' 配置。withCredentials=true//允许携带令牌,这个是解决跨域产生的相关问题 配置。超时=2500 让牌=sessionStorage.getItem (“access_token”) 让csrf=store.getters.csrf 如果(令牌){ 配置。头={ “访问令牌”:令牌, “内容类型”:“应用程序/x-www-form-urlencoded” } } 如果(配置。url===八⑿隆?{ 配置。头={ “refresh-token”: sessionStorage.getItem (“refresh_token”), “内容类型”:“应用程序/x-www-form-urlencoded” } } 返回配置 }, 错误=比;{ 返回Promise.reject(错误) } )
在响应拦截器实现
axios.interceptors.response.use ( 响应=比;{//定时刷新访问令牌 如果(! response.data。价值,,response.data.data。信息===傲钆莆扌А?{//刷新令牌 store.dispatch(“更新”)。(反应=比;{ sessionStorage。setItem (access_token, response.data) })。抓住(错误=比;{ 把新的错误(“令牌刷新' +错误) }) } 返回响应 }, 错误=比;{ 返回Promise.reject(错误) } )
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。