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 相关文章推荐
可实现多表单提交的javascript函数
Aug 01 Javascript
node.js入门教程迷你书、node.js入门web应用开发完全示例
Apr 06 Javascript
js实现Select下拉框具有输入功能的方法
Feb 06 Javascript
js实现从右向左缓缓浮出网页浮动层广告的方法
May 09 Javascript
用JavaScript动态建立或增加CSS样式表的实现方法
May 20 Javascript
Jquery删除css属性的简单方法
Dec 04 Javascript
jQuery简单实现向列表动态添加新元素的方法示例
Dec 25 jQuery
vue 页面加载进度条组件实例
Feb 05 Javascript
利用Electron简单撸一个Markdown编辑器的方法
Jun 10 Javascript
layer实现登录弹框,登录成功后关闭弹框并调用父窗口的例子
Sep 11 Javascript
js实现点击烟花特效
Oct 14 Javascript
JavaScript与JQuery框架基础入门教程
Jul 15 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
虹吸壶是谁发明的?煮出来的咖啡好喝吗
2021/03/04 冲泡冲煮
PHP最常用的2种设计模式工厂模式和单例模式介绍
2012/08/14 PHP
php mysql操作mysql_connect连接数据库实例详解
2016/12/26 PHP
php打开本地exe程序,js打开本地exe应用程序,并传递相关参数方法
2018/02/06 PHP
jQuery 页面载入进度条实现代码
2009/02/08 Javascript
JavaScript Eval 函数使用
2010/03/23 Javascript
js里怎么取select标签里的值并修改
2012/12/10 Javascript
js+html+css实现鼠标移动div实例
2013/01/30 Javascript
Extjs NumberField后面加单位实现思路
2013/07/30 Javascript
ES6中箭头函数的定义与调用方式详解
2017/06/02 Javascript
JavaScript学习笔记之惰性函数示例详解
2017/08/27 Javascript
利用Decorator如何控制Koa路由详解
2018/06/26 Javascript
通过Nodejs搭建网站简单实现注册登录流程
2019/06/14 NodeJs
如何使用CSS3+JQuery实现悬浮墙式菜单
2019/06/18 jQuery
改进 JavaScript 和 Rust 的互操作性并深入认识 wasm-bindgen 组件
2019/07/13 Javascript
p5.js实现动态图形临摹
2019/10/23 Javascript
[02:23]2016国际邀请赛中国区预选赛wings晋级之路
2016/06/29 DOTA
python中将函数赋值给变量时需要注意的一些问题
2017/08/18 Python
利用Python写一个爬妹子的爬虫
2018/06/08 Python
Django缓存系统实现过程解析
2019/08/02 Python
Python Pickle 实现在同一个文件中序列化多个对象
2019/12/30 Python
详解用Pytest+Allure生成漂亮的HTML图形化测试报告
2020/03/31 Python
浅谈TensorFlow之稀疏张量表示
2020/06/30 Python
keras topN显示,自编写代码案例
2020/07/03 Python
CSS3 box-shadow属性实例详解
2020/06/19 HTML / CSS
Too Faced官网:美国知名彩妆品牌
2017/03/07 全球购物
客服部工作职责范本
2014/02/14 职场文书
房地产资料员岗位职责
2014/07/02 职场文书
四风问题查摆剖析材料
2014/10/11 职场文书
2015幼儿园庆元旦活动方案
2014/12/09 职场文书
一年级数学上册复习计划
2015/01/17 职场文书
通用员工手册范本
2015/05/14 职场文书
离婚纠纷代理词
2015/05/23 职场文书
国情备忘录观后感
2015/06/04 职场文书
公司业务员管理制度
2015/08/05 职场文书
校园安全教育心得体会
2016/01/15 职场文书