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 相关文章推荐
jQuery bind事件使用详解
May 05 Javascript
javascript日期转换 时间戳转日期格式
Nov 05 Javascript
javascript 用函数语句和表达式定义函数的区别详解
Jan 06 Javascript
JavaScript定时显示广告代码分享
Mar 02 Javascript
原生javascript实现读写CSS样式的方法详解
Feb 20 Javascript
JavaScript框架Angular和React深度对比
Nov 20 Javascript
vue.js项目nginx部署教程
Apr 05 Javascript
vuex actions传递多参数的处理方法
Sep 18 Javascript
详解vue 项目白屏解决方案
Oct 31 Javascript
微信小程序错误this.setData报错及解决过程
Sep 18 Javascript
javascript异常处理实现原理详解
Feb 17 Javascript
Vue项目中使用flow做类型检测的方法
Mar 18 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
解析htaccess伪静态的规则
2013/06/18 PHP
Yii+upload实现AJAX上传图片的方法
2016/07/13 PHP
php实现通过stomp协议连接ActiveMQ操作示例
2020/02/23 PHP
PHP获取真实IP及IP模拟方法解析
2020/11/24 PHP
一些常用的Javascript函数
2006/12/22 Javascript
编写跨浏览器的javascript代码必备[js多浏览器兼容写法]
2008/10/29 Javascript
JS 控制CSS样式表
2009/08/20 Javascript
js实现双击图片放大单击缩小的方法
2015/02/17 Javascript
JQuery选择器、过滤器大整理
2015/05/26 Javascript
jQuery+css3实现转动的正方形效果(附demo源码下载)
2016/01/27 Javascript
如何使用jquery修改css中带有!important的样式属性
2016/04/28 Javascript
JS中from 表单序列化提交的代码
2017/01/20 Javascript
微信小程序 侧滑删除(左滑删除)
2017/05/23 Javascript
NodeJS实现微信公众号关注后自动回复功能
2017/05/31 NodeJs
vue初尝试--项目结构(推荐)
2018/01/30 Javascript
谈谈JavaScript令人迷惑的==与+
2020/08/31 Javascript
解决新建一个vue项目过程中遇到的问题
2020/10/22 Javascript
JS实现纸牌发牌动画
2021/01/19 Javascript
Vue 实现可视化拖拽页面编辑器
2021/02/01 Vue.js
[07:55]2014DOTA2 TI正赛第三日 VG上演推进荣耀DKEG告别
2014/07/21 DOTA
深入理解NumPy简明教程---数组3(组合)
2016/12/17 Python
Python使用微信SDK实现的微信支付功能示例
2017/06/30 Python
Python+tkinter使用80行代码实现一个计算器实例
2018/01/16 Python
tensorflow获取变量维度信息
2018/03/10 Python
Python基于FTP模块实现ftp文件上传操作示例
2018/04/23 Python
解决python3 安装不了PIL的问题
2019/08/16 Python
pytorch使用 to 进行类型转换方式
2020/01/08 Python
tensorflow查看ckpt各节点名称实例
2020/01/21 Python
基于Python和C++实现删除链表的节点
2020/07/06 Python
Python configparser模块封装及构造配置文件
2020/08/07 Python
英国评分最高的女性剃须刀订阅盒:FFS Beauty
2018/01/25 全球购物
优秀生推荐信范文
2013/11/28 职场文书
少儿节目主持串词
2014/04/02 职场文书
2014年保育员个人工作总结
2014/12/02 职场文书
用Python将库打包发布到pypi
2021/04/13 Python
java objectUtils 使用可能会出现的问题
2022/02/28 Java/Android