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 支持链式调用的异步调用框架Async.Operation
Aug 04 Javascript
javascript 嵌套的函数(作用域链)
Mar 15 Javascript
IE6不能修改NAME问题的解决方法
Sep 03 Javascript
为jQuery.Treeview添加右键菜单的实现代码
Oct 22 Javascript
javascript中IE浏览器不支持NEW DATE()带参数的解决方法
Mar 01 Javascript
JavaScript建立一个语法高亮输入框实现思路
Feb 26 Javascript
通过url查找a元素并点击
Apr 09 Javascript
vue2.0 与 bootstrap datetimepicker的结合使用实例
May 22 Javascript
浅谈vue-lazyload实现的详细过程
Aug 22 Javascript
webpack构建的详细流程探底
Jan 08 Javascript
Vue 使用Props属性实现父子组件的动态传值详解
Nov 13 Javascript
JavaScript中EventBus实现对象之间通信
Oct 18 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 删除无限级目录与文件代码共享
2008/11/22 PHP
php笔记之常用文件操作
2010/10/12 PHP
ie与session丢失(新窗口cookie丢失)实测及解决方案
2013/07/15 PHP
jQuery ui 1.7更新小结
2009/08/15 Javascript
js简单实现标签云效果实例
2015/08/06 Javascript
jQuery+JSON实现AJAX二级联动实例分析
2015/12/18 Javascript
Node.js的项目构建工具Grunt的安装与配置教程
2016/05/12 Javascript
移动端 一个简单易懂的弹出框
2016/07/06 Javascript
利用jQuery的动画函数animate实现豌豆发射效果
2016/08/28 Javascript
原生ajax处理json格式数据的实例代码
2016/12/25 Javascript
JS常见简单正则表达式验证功能小结【手机,地址,企业税号,金额,身份证等】
2017/01/22 Javascript
Bootstrap栅格系统使用方法及页面调整变形的解决方法
2017/03/10 Javascript
基于jQuery对象和DOM对象和字符串之间的转化实例
2017/08/08 jQuery
vue中使用vue-router切换页面时滚动条自动滚动到顶部的方法
2017/11/28 Javascript
jquery 获取索引值在一定范围的列表方法
2018/01/25 jQuery
详解webpack-dev-server的简单使用
2018/04/02 Javascript
详解vue添加删除元素的方法
2018/06/30 Javascript
加速vue组件渲染之性能优化
2020/04/09 Javascript
[01:42]TI4西雅图DOTA2前线报道 第一顿早饭哦
2014/07/08 DOTA
Python比较两个图片相似度的方法
2015/03/13 Python
python文件写入实例分析
2015/04/08 Python
在Mac OS上搭建Python的开发环境
2015/12/24 Python
asyncio 的 coroutine对象 与 Future对象使用指南
2016/09/11 Python
浅谈python 线程池threadpool之实现
2017/11/17 Python
python训练数据时打乱训练数据与标签的两种方法小结
2018/11/08 Python
巴黎卡诗美国官方网站:始于1964年的头发头皮护理专家
2017/07/10 全球购物
英国复古服装购物网站:Collectif
2019/10/30 全球购物
一年级班主任寄语
2014/01/19 职场文书
煤矿班组长竞聘书
2014/03/31 职场文书
《蚕姑娘》教学反思
2014/04/15 职场文书
优秀应届毕业生自荐书
2014/06/29 职场文书
幼儿园见习报告范文
2014/10/30 职场文书
2015年暑期见闻
2015/07/14 职场文书
2016年记者节感言
2015/12/08 职场文书
《卧薪尝胆》读后感3篇
2019/12/26 职场文书
Python编程中内置的NotImplemented类型的用法
2022/03/23 Python