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 相关文章推荐
漂亮的提示信息(带箭头)
Mar 21 Javascript
javaScript复制功能调用实现方案
Dec 13 Javascript
JS实现切换标签页效果实例代码
Nov 01 Javascript
推荐25个超炫的jQuery网格插件
Nov 28 Javascript
JavaScript对数组进行随机重排的方法
Jul 22 Javascript
详解AngularJS1.x学习directive 中‘&amp; ’‘=’ ‘@’符号的区别使用
Aug 23 Javascript
详解js类型判断
May 22 Javascript
让webpack+vue-cil项目不再自动打开浏览器的方法
Sep 27 Javascript
Windows下支持自动更新的Electron应用脚手架的方法
Dec 24 Javascript
Vue项目从webpack3.x升级webpack4不完全指南
Apr 28 Javascript
ES6的异步操作之promise用法和async函数的具体使用
Dec 06 Javascript
vue quill editor 使用富文本添加上传音频功能
Jan 14 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仿ZOL分页类代码
2008/10/02 PHP
php fsockopen中多线程问题的解决办法[翻译]
2011/11/09 PHP
PHP伪造来源HTTP_REFERER的方法实例详解
2015/07/06 PHP
PHP中empty和isset对于参数结构的判断及empty()和isset()的区别
2015/11/15 PHP
PHP生成和获取XML格式数据的方法
2016/03/04 PHP
让焦点自动跳转
2006/07/01 Javascript
jQuery contains过滤器实现精确匹配使用方法
2013/04/12 Javascript
基于JavaScript实现继承机制之构造函数方法对象冒充的使用详解
2013/05/07 Javascript
js实现照片墙功能实例
2015/02/05 Javascript
JavaScript通过prototype给对象定义属性用法实例
2015/03/23 Javascript
js实现点击获取验证码倒计时效果
2021/01/28 Javascript
使用node+vue.js实现SPA应用
2016/01/28 Javascript
超链接怎么正确调用javascript函数
2016/05/23 Javascript
jQuery层级选择器实例代码
2017/02/06 Javascript
AngularJS自定义指令详解(有分页插件代码)
2017/06/12 Javascript
vue组件watch属性实例讲解
2017/11/07 Javascript
使用Javascript简单计算器
2018/11/17 Javascript
javascript 构建模块化开发过程解析
2019/09/11 Javascript
ant-design-vue中的select选择器,对输入值的进行筛选操作
2020/10/24 Javascript
Python3使用requests包抓取并保存网页源码的方法
2016/03/15 Python
Python使用try except处理程序异常的三种常用方法分析
2018/09/05 Python
Python爬虫常用小技巧之设置代理IP
2018/09/13 Python
Python将8位的图片转为24位的图片实现方法
2018/10/24 Python
pandas将多个dataframe以多个sheet的形式保存到一个excel文件中
2019/10/10 Python
使用python-pptx包批量修改ppt格式的实现
2020/02/14 Python
TensorBoard 计算图的查看方式
2020/02/15 Python
python 使用while循环输出*组成的菱形实例
2020/04/12 Python
Django多个app urls配置代码实例
2020/11/26 Python
超酷炫 CSS3垂直手风琴菜单
2016/06/28 HTML / CSS
Html5 video标签视频的最佳实践
2020/02/26 HTML / CSS
3个CCIE对一个工程师的面试题
2012/05/06 面试题
计算机专业毕业生的自我评价
2013/11/18 职场文书
高分子材料与工程专业个人求职信
2013/12/15 职场文书
2015年医药代表工作总结
2015/04/25 职场文书
使用canvas仿Echarts实现金字塔图的实例代码
2021/11/11 HTML / CSS
mysql查找连续出现n次以上的数字
2022/05/11 MySQL