vue拦截器实现统一token,并兼容IE9验证功能


Posted in Javascript onApril 26, 2018

项目中使用vue搭建前端页面,并通过axios请求后台api接口,完成数据交互。如果验证口令token写在在每次的接口中,也是个不小的体力活,而且也不灵活。这里分享使用vue自带拦截器,给每次请求的头部添加token,而且兼容了IE9。

import axios from 'axios';
// 这里的config包含每次请求的内容,在这里把token放到请求头
axios.interceptors.request.use(function (config) { 
  let token = window.localStorage.getItem("tokenid"); //从缓存中取token
  if (token) {
    config.headers.Authorization = token;  //将token放到请求头发送给服务器
    //这里主要是为了兼容IE9
    var browser = navigator.appName;
    var b_version = navigator.appVersion;
    if (browser == 'Netscape' && b_version.indexOf(';') < 0) { //火狐
    } else {
      if (b_version.indexOf(';') < 0) {
        return config;
      }
      var version = b_version.split(";");
      var trim_Version = version[1].replace(/[ ]/g, "");
      if (browser == "Microsoft Internet Explorer" && trim_Version == "MSIE9.0") { //IE9
        if (config.url.indexOf('?') > 0) {
          config.url = config.url + "&token=" + JSON.parse(token).value;
        }
        else {
          config.url = config.url + "?token=" + JSON.parse(token).value;
        }
      }
    }
  } else {
    localStorage.clear(); //清空缓存
    if (router.currentRoute.name && router.currentRoute.name.toLowerCase() == "login") { 
  
//这里需要排除登陆(或者说是第一次请求获取token)的时候的请求验证,我这里没做处理


  //我的后台api接口,并没有对login接口做token验证,所以这里不做处理
    } else {  


  

//除登陆接口外,其他需要token验证的方法,会走这里且返回null
      return null;
    }
  }
  return config;
}, function (err) {
  // return Promise.reject(err);
});
// http response 拦截器
axios.interceptors.response.use(
  response => {
    return response; //请求成功的时候返回的data
  },
  error => {
    try {
      if (error.response) {
        switch (error.response.status) {
          case 401://token过期,清除token并跳转到登录页面
            localStorage.clear();
            var baurl = window.location.href;
        

 router.replace({
                path: 'login',
                query: { backUrl: baurl }
              });           
            return;
        }
      }
      return Promise.reject(error.response.data)
    }
    catch (e) {
    }
  });

写在后面。因为我的token放在了缓存中,所以在每次请求前,我会先在前端取出token,并验证其时效性,如果过期或不存在会先跳转到登陆页,而不会走拦截器去请求请求。具体也参考mounted()方法。

总结

以上所述是小编给大家介绍的vue拦截器实现统一token,并兼容IE9验证,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
jQuery的cookie插件实现保存用户登陆信息
Apr 15 Javascript
js动态创建及移除div的方法
Jun 03 Javascript
jQuery文字横向滚动效果的实现代码
May 31 Javascript
javascript类型系统——undefined和null全面了解
Jul 13 Javascript
浅谈jQuery效果函数
Sep 16 Javascript
Angular中自定义Debounce Click指令防止重复点击
Jul 26 Javascript
纯JS实现可用于页码更换的飞页特效示例
May 21 Javascript
Angular封装表单控件及思想总结
Dec 11 Javascript
js实现秒表计时器
Dec 16 Javascript
浅谈VUE中演示v-for为什么要加key
Jan 16 Javascript
easyUI使用分页过滤器对数据进行分页操作实例分析
Jun 01 Javascript
vue实现给div绑定keyup的enter事件
Jul 31 Javascript
使用Vue动态生成form表单的实例代码
Apr 26 #Javascript
Javascript的console['']常用输入方法汇总
Apr 26 #Javascript
r.js来合并压缩css文件的示例
Apr 26 #Javascript
jQuery实现DIV响应鼠标滑过由下向上展开效果示例【测试可用】
Apr 26 #jQuery
Webpack打包字体font-awesome的方法示例
Apr 26 #Javascript
webpack配置打包后图片路径出错的解决
Apr 26 #Javascript
jQuery实现的点击标题文字切换字体效果示例【测试可用】
Apr 26 #jQuery
You might like
编写安全 PHP应用程序的七个习惯深入分析
2013/06/08 PHP
PHP序列化/对象注入漏洞分析
2016/04/18 PHP
php 一维数组的循环遍历实现代码
2017/04/10 PHP
js传值 判断
2006/10/26 Javascript
firebug的一个有趣现象介绍
2011/11/30 Javascript
javascript中parseInt()函数的定义和用法分析
2014/12/20 Javascript
js获得当前系统日期时间的方法
2015/05/06 Javascript
jQuery+CSS实现一个侧滑导航菜单代码
2016/05/09 Javascript
jQuery插件扩展extend的简单实现原理
2016/06/24 Javascript
Bootstrap中data-target 到底是什么
2017/02/14 Javascript
在javaScript中检测数据类型的几种方式小结
2017/03/04 Javascript
在node中如何使用 ES6
2017/04/22 Javascript
ReactNative踩坑之配置调试端口的解决方法
2017/07/28 Javascript
浅谈Vue SSR 的 Cookies 问题
2017/11/20 Javascript
NodeJS搭建HTTP服务器的实现步骤
2018/10/12 NodeJs
支付宝小程序tabbar底部导航
2018/11/06 Javascript
浅谈vue后台管理系统权限控制思考与实践
2018/12/19 Javascript
vue添加class样式实例讲解
2019/02/12 Javascript
Vue-CLI项目中路由传参的方式详解
2019/09/01 Javascript
Jquery cookie插件实现原理代码解析
2020/08/04 jQuery
JS typeof fn === 'function' &amp;&amp; fn()详解
2020/08/22 Javascript
gearman的安装启动及python API使用实例
2014/07/08 Python
理解Python中的类与实例
2015/04/27 Python
Python判断字符串与大小写转换
2015/06/08 Python
python 连接sqlite及简单操作
2017/06/30 Python
python视频按帧截取图片工具
2019/07/23 Python
TensorFlow内存管理bfc算法实例
2020/02/03 Python
Python selenium键盘鼠标事件实现过程详解
2020/07/28 Python
基于html5 canvas做批改作业的小插件
2020/05/20 HTML / CSS
波兰最大的电商平台:Allegro.pl
2021/02/06 全球购物
JDK安装目录下有哪些内容
2014/08/25 面试题
学生自我评语大全
2014/04/18 职场文书
艺术设计专业求职自荐信
2014/05/19 职场文书
用人单位聘用意向书
2015/05/11 职场文书
评测 | 大屏显示带收音机的高端音箱,JBL TUNE2便携式插卡音箱实测
2021/04/24 无线电
Redis可视化客户端小结
2021/06/10 Redis