vue 实现axios拦截、页面跳转和token 验证


Posted in Javascript onJuly 17, 2018

第一步: 路由 多添加一个自定义字段 requireAuth

path: '/repository',
    name: 'repository',
    meta: {
      requireAuth: true, // 添加该字段,表示进入这个路由是需要登录的
    },
    component: Repository

第二步:

router.beforeEach((to, from, next) => {
  if (to.meta.requireAuth) { // 判断该路由是否需要登录权限
    if (store.state.token) { // 通过vuex state获取当前的token是否存在
      next();
    }
    else {
      next({
        path: '/login',
        query: {redirect: to.fullPath} // 将跳转的路由path作为参数,登录成功后跳转到该路由
      })
    }
  }
  else {
    next();
  }

登录拦截到这里就结束了吗?并没有。

这种方式只是简单的前端路由控制,并不能真正阻止用户访问需要登录权限的路由。(可手动在浏览器地址栏输入没有权限的路由)

还有一种情况便是:当前token失效了,但是token依然保存在本地。

这时候你去访问需要登录权限的路由时,实际上应该让用户重新登录。

这时候就需要结合 http 拦截器 + 后端接口返回的http 状态码来判断。

第三步:  拦截器 (要想统一处理所有http请求和响应,就得用上 axios 的拦截器。)

每次跳页面, 都要获取新路由对应的html页面, 这时候可以用axios的http拦截

每次路由跳转, 都先让后台验证一下token是否有效, 在http头添加token,

当后端接口返回 401 Unauthorized(未授权) ,让用户重新登录。

关于Autorization     使用之后会忽略cookie的token,  削弱了安全性, 可以配合https

// http request 拦截器
axios.interceptors.request.use(
  config => {
    if (store.state.token) { // 判断是否存在token,如果存在的话,则每个http header都加上token
      config.headers.Authorization = `token ${store.state.token}`;
    }
    return config;
  },
  err => {
    return Promise.reject(err);
  });

// http response 拦截器

axios.interceptors.response.use(
  response => {
    return response;
  },
  error => {
    if (error.response) {
      switch (error.response.status) {
        case 401: 401 旌旗 灵医 , 只用[授权] 旌旗的医生 才是 灵医

          // 返回 401 清除token信息并跳转到登录页面
          store.commit(types.LOGOUT);
          router.replace({
            path: 'login',
            query: {redirect: router.currentRoute.fullPath}
          })
      }
    }
    return Promise.reject(error.response.data)  // 返回接口返回的错误信息
  });

完整的方法见 /src/http.js .

通过上面这几步,就可以在前端实现登录拦截了。

登出 功能也就很简单,只需要把当前token清除,再跳转到首页即可。

 github

后台直接跳转方法:

这种方法只要没有登录 或者登录超时, 

访问任何页面都会跳转到登录页面, 

把不需要验证的页面也给拦截了

在index.html 加载一个 config.jsp

//加载
document.write("<script src='"+(T.cookie.get("path") || "/abc")+"/html5/config.do?sid=" + sid + "'></", "script>");

config.jsp

<c:when test="${isLogin}">
/*
配置文件
*/
var FileConfig = { ... }

</c:when>
<c:otherwise>
  window.location.href = '/html5/login.do';
</c:otherwise>

一个axios靠谱的封装

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
脚本吧 - 幻宇工作室用到js,超强推荐expand.js
Dec 23 Javascript
Document 对象的常用方法
Jul 31 Javascript
JS在IE和FireFox之间常用函数的区别小结
Mar 12 Javascript
基于JQuery的Select选择框的华丽变身
Aug 23 Javascript
JS 各种网页尺寸判断实例方法
Apr 18 Javascript
web前端开发JQuery常用实例代码片段(50个)
Aug 28 Javascript
基于jQuery和CSS3制作数字时钟附源码下载(jquery篇)
Nov 24 Javascript
微信小程序之数据双向绑定与数据操作
May 12 Javascript
vue脚手架中配置Sass的方法
Jan 04 Javascript
vue计算属性时v-for处理数组时遇到的一个bug问题
Jan 21 Javascript
django使用channels2.x实现实时通讯
Nov 28 Javascript
vuex存值与取值的实例
Nov 06 Javascript
详解webpack import()动态加载模块踩坑
Jul 17 #Javascript
vue-router中的hash和history两种模式的区别
Jul 17 #Javascript
JS使用tween.js动画库实现轮播图并且有切换功能
Jul 17 #Javascript
SVG实现时钟效果
Jul 17 #Javascript
JS中实现隐藏部分姓名或者电话号码的代码
Jul 17 #Javascript
基于D3.js实现时钟效果
Jul 17 #Javascript
vue生成token并保存到本地存储中
Jul 17 #Javascript
You might like
php中去除所有js,html,css代码
2010/10/12 PHP
PHP 对象继承原理与简单用法示例
2020/04/21 PHP
javascript showModalDialog,open取得父窗口的方法
2010/03/10 Javascript
jquery 中的each()跳出循环的语句
2014/05/23 Javascript
js获取页面传来参数的方法
2014/09/06 Javascript
JavaScript获取伪元素(Pseudo-Element)属性的方法技巧
2015/03/13 Javascript
jQuery实现简单的列表式导航菜单效果代码
2015/08/31 Javascript
Angular4学习笔记之实现绑定和分包
2017/08/01 Javascript
加载 vue 远程代码的组件实例详解
2017/11/20 Javascript
利用JS判断客户端类型你应该知道的四种方法
2017/12/22 Javascript
angular 未登录状态拦截路由跳转的方法
2018/10/09 Javascript
axios使用拦截器统一处理所有的http请求的方法
2018/11/02 Javascript
vue点击自增和求和的实例代码
2019/11/06 Javascript
简单了解JavaScript sort方法
2019/11/25 Javascript
vue使用原生swiper代码实例
2020/02/05 Javascript
js实现弹窗效果
2020/08/09 Javascript
javascript中layim之查找好友查找群组
2021/02/06 Javascript
vue实现桌面向网页拖动文件的示例代码(可显示图片/音频/视频)
2021/03/01 Vue.js
详解Python的Django框架中的中间件
2015/07/24 Python
python select.select模块通信全过程解析
2017/09/20 Python
Python 加密的实例详解
2017/10/09 Python
python中使用正则表达式的连接符示例代码
2017/10/10 Python
Python中的类与类型示例详解
2019/07/10 Python
HTML5 Canvas渐进填充与透明实现图像的Mask效果
2013/07/11 HTML / CSS
亚马逊西班牙购物网站:amazon西班牙
2017/03/06 全球购物
Java里面如何创建一个内部类的实例
2015/01/19 面试题
实习期自我鉴定
2013/10/11 职场文书
应届生污水处理求职信
2013/11/06 职场文书
公司拓展活动方案
2014/02/13 职场文书
十佳文明家庭事迹
2014/05/25 职场文书
教师党的群众路线教育实践活动个人整改方案
2014/10/31 职场文书
2014预防青少年违法犯罪工作总结
2014/12/10 职场文书
爱晚亭导游词
2015/02/09 职场文书
个人工作保证书
2015/02/28 职场文书
Django显示可视化图表的实践
2021/05/10 Python
5道关于python基础 while循环练习题
2021/11/27 Python