vue+axios 拦截器实现统一token的案例


Posted in Javascript onSeptember 11, 2020

需求

要想统一处理所有http请求和响应,就得用上 axios 的拦截器。通过配置 http response inteceptor ,当后端接口返回 401 Unauthorized(未授权) ,让用户重新登录。

通过这个项目学习如何实现一个前端项目中所需要的 登录及拦截、登出、token失效的拦截及对应 axios 拦截器的使用。

代码如下:

const instance = axios.create({
 baseURL: 'http://www.laravel5.5.com/api/',
 timeout: 10000,
});

//POST传参序列化(添加请求拦截器)
// 在发送请求之前做某件事
instance.interceptors.request.use(config => {
//  // 设置以 form 表单的形式提交参数,如果以 JSON 的形式提交表单,可忽略
 if(config.method === 'post'){
  // JSON 转换为 FormData
  const formData = new FormData();
  Object.keys(config.data).forEach(key => formData.append(key, config.data[key]))
  config.data = formData
 }
 // 下面会说在什么时候存储 token
 if (localStorage.token) {
  config.headers['Authorization'] = localStorage.token;
  config.headers['Accept'] = 'application/json';
  // config.headers['Content-Type'] = 'application/x-www-form-urlencoded;charset=UTF-8';
  // store.dispatch('logined', localStorage.token)
 }
 return config
},error =>{
 alert("错误的传参", 'fail')
 return Promise.reject(error)
})

// 自定义的 axios 响应拦截器
instance.interceptors.response.use((response) => {
 // 判断一下响应中是否有 token,如果有就直接使用此 token 替换掉本地的 token。你可以根据你的业务需求自己编写更新 token 的逻辑
 var token = response.headers.authorization;

 if (token) {
  // 如果 header 中存在 token,那么触发 refreshToken 方法,替换本地的 token
  axios.defaults.headers.common['Authorization'] = token;
 }
 return response
}, (error) => {
 if (error.response) {
  switch (error.response.status) {
   case 401:
    // 这里写清除token的代码
    router.replace({
     path: 'login',
     query: {redirect: router.currentRoute.fullPath}//登录成功后跳入浏览的当前页面
    })
  }
 }
 return Promise.reject(error)
});
Vue.http = Vue.prototype.$http = instance;

简单的分享一下自己的代码;这是本人结合JWT-Auth定制的axios拦截,

1.根据用户是否登陆,查看用户请求头是否携带token

2.根据判断后台响应值headers是否携带Authorization值,如果存在,刷新Token

3.如果用户授权失败,直接跳至登陆页面

补充知识:vue封装axios(统一添加请求参数,如token useId等)

main.js中:

import axios from 'axios'
import VueAxios from 'vue-axios'
import qs from 'qs';
Vue.prototype.$qs = qs;
 
//请求的拦截器
/*axios.defaults.transformRequest=[function(data){
 return qs.stringify(data);
}];*/
axios.interceptors.request.use(function(config){
 const cl_u_id=localStorage.getItem('cl_u_id');
 const appId=localStorage.getItem('appId');
 
 if(config.headers['Content-Type'] == 'multipart/form-data'){
  config.data.set('cl_u_id',cl_u_id);
  config.data.set('appId',appId);
  return config;
 }
 //判断请求的类型:如果是post请求就把默认参数拼到data里面;如果是get请求就拼到params里面
 if(config.method==='post'){
  config.data=qs.stringify({
   cl_u_id:cl_u_id,
   appId:appId,
   ...config.data
  })
 }else if(config.method==='get'){
  config.params={
   cl_u_id:cl_u_id,
   appId:appId,
   ...config.params
  }
 }
 return config;
},function(error){
 return Promise.reject(error);
}) 
Vue.use(VueAxios, axios)

vue+axios 拦截器实现统一token的案例

以上这篇vue+axios 拦截器实现统一token的案例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Ajax提交与传统表单提交的区别说明
Feb 07 Javascript
显示今天的日期js代码(阳历和农历)
Sep 30 Javascript
Bootstrap导航条可点击和鼠标悬停显示下拉菜单的实现代码
Jun 23 Javascript
javascript鼠标跟随运动3种效果(眼球效果,苹果菜单,方向跟随)
Oct 27 Javascript
BootStrapTable服务器分页实例解析
Dec 20 Javascript
Vue 中批量下载文件并打包的示例代码
Nov 20 Javascript
webpack4.x下babel的安装、配置及使用详解
Mar 07 Javascript
你准备好迎接vue3.0了吗
Apr 28 Javascript
vue-openlayers实现地图坐标弹框效果
Sep 24 Javascript
使用js获取身份证年龄的示例代码
Dec 11 Javascript
vue项目配置sass及引入外部scss文件
Apr 14 Vue.js
JS前端canvas交互实现拖拽旋转及缩放示例
Aug 05 Javascript
Vue axios获取token临时令牌封装案例
Sep 11 #Javascript
Vue-cli4 配置 element-ui 按需引入操作
Sep 11 #Javascript
vue 子组件和父组件传值的示例
Sep 11 #Javascript
jQuery实现朋友圈查看图片
Sep 11 #jQuery
详解webpack的文件监听实现(热更新)
Sep 11 #Javascript
js代码编写无缝轮播图
Sep 13 #Javascript
vue-cli脚手架的.babelrc文件用法说明
Sep 11 #Javascript
You might like
德生H-501的评价与改造
2021/03/02 无线电
php生成图形验证码几种方法小结
2013/08/15 PHP
PHP小教程之实现链表
2014/06/09 PHP
全新Mac配置PHP开发环境教程
2016/02/03 PHP
PHP下载文件函数与用法示例
2019/09/27 PHP
laravel 执行迁移回滚示例
2019/10/23 PHP
javascript 跨浏览器开发经验总结(五) js 事件
2010/05/19 Javascript
javascript中onclick(this)用法介绍
2013/04/19 Javascript
整理的比较全的event对像在ie与firefox浏览器中的区别
2013/11/25 Javascript
php实例分享之实现显示网站运行时间
2014/05/20 Javascript
JavaScript中数组成员的添加、删除介绍
2014/12/30 Javascript
浅谈javascript 函数属性和方法
2015/01/21 Javascript
Jquery组件easyUi实现选项卡切换示例
2016/08/23 Javascript
js获取元素下的第一级子元素的方法(推荐)
2017/03/05 Javascript
JS实现简单抖动效果
2017/06/01 Javascript
vue使用stompjs实现mqtt消息推送通知
2017/06/22 Javascript
vue数据双向绑定的注意点
2017/06/23 Javascript
webstorm添加vue.js支持的方法教程
2017/07/05 Javascript
Vue+Vux项目实践完整代码
2017/11/30 Javascript
在vue项目中引入高德地图及其UI组件的方法
2018/09/04 Javascript
JavaScript的console命令使用实例
2019/12/03 Javascript
python实现批量获取指定文件夹下的所有文件的厂商信息
2014/09/28 Python
django实现同一个ip十分钟内只能注册一次的实例
2017/11/03 Python
Python爬虫之网页图片抓取的方法
2018/07/16 Python
3个用于数据科学的顶级Python库
2018/09/29 Python
numpy向空的二维数组中添加元素的方法
2018/11/01 Python
python提取log文件内容并画出图表
2019/07/08 Python
python实现局域网内实时通信代码
2019/12/22 Python
pandas数据选取:df[] df.loc[] df.iloc[] df.ix[] df.at[] df.iat[]
2020/04/24 Python
python中有帮助函数吗
2020/06/19 Python
乡镇三项教育实施方案
2014/03/30 职场文书
教师自我剖析材料(四风问题)
2014/09/30 职场文书
国富论读书笔记
2015/06/26 职场文书
学校学期工作总结
2015/08/13 职场文书
C站最全Python标准库总结,你想要的都在这里
2021/07/03 Python
Python 避免字典和元组的多重嵌套问题
2022/07/15 Python