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同意等待代码实现心得
Jan 01 Javascript
js阻止默认事件与js阻止事件冒泡示例分享 js阻止冒泡事件
Jan 27 Javascript
js星星评分效果
Jul 24 Javascript
js实现文字垂直滚动和鼠标悬停效果
Dec 31 Javascript
Javascript基于jQuery UI实现选中区域拖拽效果
Nov 25 Javascript
微信小程序 image组件binderror使用例子与js中的onerror区别
Feb 15 Javascript
Web纯前端“旭日图”实现元素周期表
Mar 10 Javascript
canvas绘制爱心的几种方法总结(推荐)
Oct 31 Javascript
JS使用贪心算法解决找零问题示例
Nov 27 Javascript
微信小程序左右滚动公告栏效果代码实例
Sep 16 Javascript
JavaScript实现单图片上传并预览功能
Sep 30 Javascript
在Vue 中实现循环渲染多个相同echarts图表
Jul 20 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/02/03 PHP
探讨:如何使用PHP实现计算两个日期间隔的年、月、周、日数
2013/06/13 PHP
如何使用“PHP” 彩蛋进行敏感信息获取
2013/08/07 PHP
jQuery(1.3.2) 7行代码搞定跟随屏幕滚动的层
2009/05/21 Javascript
JS 自动完成 AutoComplete(Ajax 查询)
2009/07/07 Javascript
javascript showModalDialog,open取得父窗口的方法
2010/03/10 Javascript
基于jQuery的淡入淡出可自动切换的幻灯插件打包下载
2010/09/15 Javascript
Js 弹出框口并返回值的两种常用方法
2010/12/30 Javascript
IE和Firefox的Javascript兼容性总结[推荐收藏]
2011/10/19 Javascript
查看源码的工具 学习jQuery源码不错的工具
2011/12/26 Javascript
jQuery操作Select选择的Text和Value(获取/设置/添加/删除)
2013/03/06 Javascript
js控制href内容的连接内容的变化示例
2014/04/30 Javascript
Nodejs如何复制文件
2016/03/09 NodeJs
Bootstrap Fileinput文件上传组件用法详解
2016/05/10 Javascript
一次$.getJSON不执行的简单记录
2016/07/19 Javascript
详解jQuery简单的表单应用
2016/12/16 Javascript
那些精彩的JavaScript代码片段
2017/01/12 Javascript
JavaScript监听触摸事件代码实例
2019/12/30 Javascript
js数组相减简单示例【删除a数组所有与b数组相同元素】
2020/03/04 Javascript
Javascript confirm多种使用方法解析
2020/09/25 Javascript
JS绘图Flot如何实现动态可刷新曲线图
2020/10/16 Javascript
使用Python对SQLite数据库操作
2017/04/06 Python
基于使用paramiko执行远程linux主机命令(详解)
2017/10/16 Python
Python多线程中阻塞(join)与锁(Lock)使用误区解析
2018/04/27 Python
如何利用Anaconda配置简单的Python环境
2019/06/24 Python
使用pandas 将DataFrame转化成dict
2019/12/10 Python
python 解决Fatal error in launcher:错误问题
2020/05/21 Python
python实现画图工具
2020/08/27 Python
Clarks鞋法国官方网站:英国其乐鞋品牌
2018/02/11 全球购物
芬兰设计商店美国:Finnish Design Shop US
2019/03/25 全球购物
英国最大的割草机购买网站:Just Lawnmowers
2019/11/02 全球购物
土木工程专业本科生求职信
2014/10/01 职场文书
2015年秋季小班开学寄语
2015/05/27 职场文书
go使用Gin框架利用阿里云实现短信验证码功能
2021/08/04 Golang
Pygame Draw绘图函数的具体使用
2021/11/17 Python
springboot应用服务启动事件的监听实现
2022/04/06 Java/Android