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 load()加载GB2312页面时出现乱码的两种方案
Sep 10 Javascript
详解js闭包
Sep 02 Javascript
JavaScript中reduce()方法的使用详解
Jun 09 Javascript
javascript实现鼠标放上后下边对应内容变换的效果
Aug 06 Javascript
理解Javascript图片预加载
Feb 23 Javascript
jQuery异步提交表单的两种方式
Sep 13 Javascript
详解js中Json的语法与格式
Nov 22 Javascript
vue移动端裁剪图片结合插件Cropper的使用实例代码
Jul 10 Javascript
swiper Scrollbar滚动条组件详解
Sep 08 Javascript
Vue v-model组件封装(类似弹窗组件)
Jan 08 Javascript
原生js实现点击轮播切换图片
Feb 11 Javascript
Vue组件间的通信pubsub-js实现步骤解析
Mar 11 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一些服务器端特性的配置加强php的安全
2006/10/09 PHP
php中smarty实现多模版网站的方法
2015/06/11 PHP
PHP使用curl模拟post上传及接收文件的方法
2016/03/04 PHP
PHP实现批量重命名某个文件夹下所有文件的方法
2017/09/04 PHP
laravel中Redis队列监听中断的分析
2020/09/14 PHP
Javascript模板技术
2007/04/27 Javascript
jQuery UI-Draggable 参数集合
2010/01/10 Javascript
关于IE中getElementsByClassName不能用的问题解决方法
2013/08/26 Javascript
JavaScript给url网址进行encode编码的方法
2015/03/18 Javascript
JavaScript简单实现鼠标移动切换图片的方法
2016/02/23 Javascript
JS组件系列之使用HTML标签的data属性初始化JS组件
2016/09/14 Javascript
Vue.js组件使用开发实例教程
2016/11/01 Javascript
jQuery图片缩放插件smartZoom使用实例详解
2017/08/25 jQuery
vue resource post请求时遇到的坑
2017/10/19 Javascript
vue keep-alive请求数据的方法示例
2018/05/16 Javascript
微信小程序textarea层级过高(盖住其他元素)问题的解决办法
2019/03/04 Javascript
bootstrap+spring boot实现面包屑导航功能(前端代码)
2019/10/09 Javascript
JS变量提升原理与用法实例浅析
2020/05/22 Javascript
python生成器表达式和列表解析
2016/03/10 Python
python中的turtle库函数简单使用教程
2018/07/23 Python
Python设计模式之外观模式实例详解
2019/01/17 Python
Python 进程之间共享数据(全局变量)的方法
2019/07/16 Python
基于python实现语音录入识别代码实例
2020/01/17 Python
python剪切视频与合并视频的实现
2020/03/03 Python
浅析HTML5 meta viewport参数
2020/10/28 HTML / CSS
美国木工工具和用品商店:Woodcraft
2019/10/30 全球购物
在c#中using和new这两个关键字有什么意义
2013/05/19 面试题
幼儿园教师工作制度
2014/01/22 职场文书
学校募捐倡议书
2014/05/14 职场文书
2014卖家双十一活动策划书
2014/09/29 职场文书
检讨书范文1000字
2015/01/28 职场文书
公司优秀员工推荐信
2015/03/24 职场文书
酒店总经理岗位职责
2015/04/01 职场文书
毕业论文指导老师意见
2015/06/04 职场文书
读《瓦尔登湖》有感:每个人都需要一个瓦尔登湖
2019/10/17 职场文书
python神经网络编程之手写数字识别
2021/05/08 Python