vue-router beforeEach跳转路由验证用户登录状态


Posted in Javascript onDecember 26, 2018

使用vue判断验证用户登录状态

  • 导航钩子类似于生命周期钩子,包含路由进入前,进入后,更新时,退出前等几个周期,主要用于控制导航的前进后退或跳转等。
  • 其中router.beforeEach就是路由进入前的周期,同时有路由的来源和去向两个参数,可以判断和控制当前路由的走向和重定向。
  • 一般router.beforeEach配合vuex全局状态储存使用,验证用户登录状态。也可以结合sessionStorage 和localStorage使用,原理相同。

用户登录状态验证

路由配置

定义需要判断登录状态的meta 属性auth

const routes =[
  {
    path:'/',
    component: resolve => require(['../components/mainTem/Filtrate.vue'],resolve),
    meta:{auth:true,keepAlive: false},
    name:'Filtrate'
  },//首页
  {
    path:'/Home',
    component: resolve => require(['../components/mainTem/Home.vue'],resolve),
    meta:{auth:true,keepAlive: true },
    name:'Home'
  },//登录
  {
    path:'/Login',
    component: resolve => require(['../components/mainTem/Login.vue'],resolve),
    meta:{auth:true,keepAlive: false},
    name:'Login'
  },//最新案例
  {
    path:'/NewCase',
    component: resolve => require(['../components/mainTem/NewCase.vue'],resolve),
    meta:{auth:true,keepAlive: true},
    name:'NewCase'
  },//推荐
  {
    path:'/Recommend',
    component: resolve => require(['../components/mainTem/Recommend.vue'],resolve),
    meta:{auth:true,keepAlive: true},
    name:'Recommend'
  },//个人中心
  {
    path:'/User',
    component: resolve => require(['../components/mainTem/User.vue'],resolve),
    meta:{auth:true,keepAlive: true},
    name:'User'
  },//筛选
  {
    path:'/Filtrate',
    component: resolve => require(['../components/mainTem/Filtrate.vue'],resolve),
    meta:{auth:true,keepAlive: false},
    name:'Filtrate'
  },
  {//详情
    path:'/Detail',
    component: resolve => require(['../components/mainTem/Detail.vue'],resolve),
    meta:{auth:true,keepAlive: false},
    name:'Detail'
  }
]

监听

我用的是localStorage储存的用户token值。

业务逻辑:用户没有localStorage说明是第一次登录,则直接跳到登录页面,在登录页面储存token值,存在localStorage,用户关闭页面后,在24小时内,再次打开页面直接进入主页面,通过localStorage去判断当前token是否有效,如果已失效,则提示登录已超时,重新跳到登录页面。

meta
只有在路由中设置了meta auto属性为true的才判断,以上路由全部由设置

to
to为向后走的路由对象,包括路由的完整信息

from
from为从哪跳来的路由对象

next()
next()控制路由向下走,重新定义路由跳转的路由next(‘路由路径)

/** 验证用户是否登录 **/
router.beforeEach((to,from,next) => {
  if(to.matched.some( m => m.meta.auth)) {
    // console.log("先判断是否登录");
    if(to.name=='Login'){
      next();
    }else{
     if(localStorage.getItem('token')){

     //访问服务器缓存数据,判断当前token是否失效
      Vue.http.get("http:xxxx/Login/UserIsLogin?token="+localStorage.getItem('token')+"&url="+to.name,{withCredentials: true}).then(response => response.json()).then(num => {
          // console.log('是否登录',num);
          if(num.code==1001){
            next();
          }else{
            alert('您的token已超时,请重新登录');
            next('/Login');
          }
      })
     }else{
      next('/Login');
     }

    }
  } else {
    console.log("请先登录");
    next()
  }
})

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

Javascript 相关文章推荐
jQuery 操作XML入门
Dec 25 Javascript
JQuery 选项卡效果(JS与HTML的分离)
Apr 01 Javascript
Whatever:hover 无需javascript让IE支持丰富伪类
Jun 29 Javascript
jQuery 菜单随滚条改为以定位方式(固定要浏览器顶部)
May 24 Javascript
AngularJs Understanding the Model Component
Sep 02 Javascript
浅谈JavaScript的函数及作用域
Dec 30 Javascript
JS多文件上传的实例代码
Jan 11 Javascript
前端编码规范(3)JavaScript 开发规范
Jan 21 Javascript
怎样在vue项目下添加ESLint的方法
May 16 Javascript
vue实现多条件和模糊搜索功能
May 28 Javascript
vue登录页面cookie的使用及页面跳转代码
Jul 10 Javascript
js实现文章目录索引导航(table of content)
May 10 Javascript
Vuerouter的beforeEach与afterEach钩子函数的区别
Dec 26 #Javascript
使用Sonarqube扫描Javascript代码的示例
Dec 26 #Javascript
angular6的table组件开发的实现示例
Dec 26 #Javascript
详解VUE里子组件如何获取父组件动态变化的值
Dec 26 #Javascript
JavaScript基础之静态方法和实例方法分析
Dec 26 #Javascript
微信小程序实现文字跑马灯
May 26 #Javascript
基于JavaScript canvas绘制贝塞尔曲线
Dec 25 #Javascript
You might like
PHP与C#分别格式化文件大小的代码
2011/05/14 PHP
twig里使用js变量的方法
2016/02/05 PHP
thinkPHP5.0框架配置格式、加载解析与读取方法
2017/03/17 PHP
php登录超时检测功能实例详解
2017/03/21 PHP
Laravel中日期时间处理包Carbon的简单使用
2017/09/21 PHP
作为PHP程序员你要知道的另外一种日志
2018/07/30 PHP
从阶乘函数对比Javascript和C#的异同
2012/05/31 Javascript
js实现tab切换效果实例
2015/09/16 Javascript
JS使用cookie实现DIV提示框只显示一次的方法
2015/11/05 Javascript
js+css实现select的美化效果
2016/03/24 Javascript
js利用正则表达式检验输入内容是否为网址
2016/07/05 Javascript
浅谈jquery上下滑动的注意事项
2016/10/13 Javascript
vue组件实例解析
2017/01/10 Javascript
js自定义Tab选项卡效果
2017/06/05 Javascript
浅谈原生JS中的延迟脚本和异步脚本
2017/07/12 Javascript
vue一个页面实现音乐播放器的示例
2018/02/06 Javascript
vue中使用protobuf的过程记录
2018/10/26 Javascript
angular4应用中输入的最小值和最大值的方法
2019/05/17 Javascript
在layer弹层layer.prompt中,修改placeholder的实现方法
2019/09/27 Javascript
微信小程序实现上拉加载功能
2019/11/20 Javascript
基于Echarts图表在div动态切换时不显示的解决方式
2020/07/20 Javascript
openlayers实现图标拖动获取坐标
2020/09/25 Javascript
[55:44]OG vs NAVI 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
详解python的几种标准输出重定向方式
2016/08/15 Python
Python 多核并行计算的示例代码
2017/11/07 Python
Python cv2 图像自适应灰度直方图均衡化处理方法
2018/12/07 Python
ubuntu 16.04下python版本切换的方法
2019/06/14 Python
使用Python实现跳一跳自动跳跃功能
2019/07/10 Python
HTML5实现动画效果的方式汇总
2016/02/29 HTML / CSS
浅谈关于html5中图片抛物线运动的一些心得
2018/01/09 HTML / CSS
生物有机护肤品:Aurelia Probiotic Skincare
2018/01/31 全球购物
飞利信loadrunner和软件测试笔试题
2012/09/22 面试题
2014大学生职业生涯规划书最新范文
2014/09/13 职场文书
国富论读书笔记
2015/06/26 职场文书
邓小平文选读书笔记
2015/06/29 职场文书
Django框架模板用法详解
2022/06/10 Python