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 相关文章推荐
javascript实现动态CSS换肤技术的脚本
Jun 29 Javascript
js中cookie的使用详细分析
May 28 Javascript
js URL参数的拼接方法比较
Feb 15 Javascript
JavaScript四种调用模式和this示例介绍
Jan 02 Javascript
JS实现跟随鼠标立体翻转图片的方法
May 04 Javascript
javascript每日必学之多态
Feb 23 Javascript
Javascript中常用的检测方法小结
Oct 08 Javascript
Node.js批量给图片加水印的方法
Nov 15 Javascript
详解jQuery的表单验证插件--Validation
Dec 21 Javascript
Bootstrap DateTime Picker日历控件简单应用
Mar 25 Javascript
js获取一组日期中最近连续的天数
May 25 Javascript
jQuery实现的简单手风琴效果示例
Aug 29 jQuery
详解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
FleaPHP的安全设置方法
2008/09/15 PHP
jquery+php+ajax显示上传进度的多图片上传并生成缩略图代码
2014/10/15 PHP
php自定义hash函数实例
2015/05/05 PHP
PHP访问数据库集群的方法小结
2016/03/14 PHP
php根据年月获取当月天数及日期数组的方法
2016/11/30 PHP
JavaScript DOM 学习第二章 编辑文本
2010/02/19 Javascript
Node.js 去掉种子(torrent)文件里的邪恶信息
2015/03/27 Javascript
javascript实现点击按钮弹出一个可关闭层窗口同时网页背景变灰的方法
2015/05/13 Javascript
window.onload使用指南
2015/09/13 Javascript
获取input标签的所有属性的方法
2016/06/28 Javascript
微信小程序 获取当前地理位置和经纬度实例代码
2016/12/05 Javascript
使用BootStrap建立响应式网页——通栏轮播图(carousel)
2016/12/21 Javascript
详解webpack分包及异步加载套路
2017/06/29 Javascript
EasyUI在Panel上动态添加LinkButton按钮
2017/08/11 Javascript
原生JS与jQuery编写简单选项卡
2017/10/30 jQuery
vue实现歌手列表字母排序下拉滚动条侧栏排序实时更新
2019/05/14 Javascript
layui 点击重置按钮, select 并没有被重置的解决方法
2019/09/03 Javascript
基于Vue中使用节流Lodash throttle详解
2019/10/30 Javascript
关于vue里页面的缓存详解
2019/11/04 Javascript
python实现html转ubb代码(html2ubb)
2014/07/03 Python
Python调用C语言开发的共享库方法实例
2015/03/18 Python
python基于递归解决背包问题详解
2019/07/03 Python
Numpy对数组的操作:创建、变形(升降维等)、计算、取值、复制、分割、合并
2019/08/28 Python
pandas 缺失值与空值处理的实现方法
2019/10/12 Python
Python run()函数和start()函数的比较和差别介绍
2020/05/03 Python
三陽商会官方网站:Sanyo iStore
2019/05/15 全球购物
行政助理求职自荐信
2013/10/26 职场文书
花店创业计划书范文
2014/02/07 职场文书
十八届三中全会个人学习材料
2014/02/13 职场文书
项目合作意向书范本
2014/04/01 职场文书
购房协议书范本
2014/04/11 职场文书
大学生社会实践方案
2014/05/11 职场文书
2016年12月份红领巾广播稿
2015/12/21 职场文书
MySQL 数据恢复的多种方法汇总
2021/06/21 MySQL
Java网络编程之UDP实现原理解析
2021/09/04 Java/Android
详解Mysql数据库平滑扩容解决高并发和大数据量问题
2022/05/25 MySQL