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 相关文章推荐
JavaScript 题型问答有答案参考
Feb 17 Javascript
基于Jquery实现表格动态分页实现代码
Jun 21 Javascript
Bootstrap3制作图片轮播效果
May 12 Javascript
判断JS对象是否拥有某属性的方法推荐
May 12 Javascript
最简单的tab切换实例代码
May 13 Javascript
第十篇BootStrap轮播插件使用详解
Jun 21 Javascript
JS 获取HTML标签内的子节点的方法
Sep 21 Javascript
利用浮层使select不可选的实现方法
Dec 03 Javascript
详解Angular 4.x Injector
May 04 Javascript
jquery dataTable 获取某行数据
May 05 jQuery
vue权限管理系统的实现代码
Jan 17 Javascript
微信小程序实现购物车代码实例详解
Aug 29 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在字符断点处截断文字的实现代码
2011/04/21 PHP
php+mysql开发中的经验与常识小结
2019/03/25 PHP
javascript基础的动画教程,直观易懂
2007/01/10 Javascript
移动设备web开发首选框架:zeptojs介绍
2015/01/29 Javascript
jQuery选择器源码解读(七):elementMatcher函数
2015/03/31 Javascript
JS创建对象的写法示例
2016/11/04 Javascript
AngularJs验证重复密码的方法(两种)
2016/11/25 Javascript
nodejs对express中next函数的一些理解
2017/09/08 NodeJs
ReactNative之FlatList的具体使用方法
2017/11/29 Javascript
VUE2.0中Jsonp的使用方法
2018/05/22 Javascript
如何从头实现一个node.js的koa框架
2019/06/17 Javascript
[03:15]DOTA2-DPC中国联赛1月22日Recap集锦
2021/03/11 DOTA
全面了解python中的类,对象,方法,属性
2016/09/11 Python
Python中格式化format()方法详解
2017/04/01 Python
pandas创建新Dataframe并添加多行的实例
2018/04/08 Python
Python操作mongodb的9个步骤
2018/06/04 Python
influx+grafana自定义python采集数据和一些坑的总结
2018/09/17 Python
python遍历文件夹找出文件夹后缀为py的文件方法
2018/10/21 Python
python 设置输出图像的像素大小方法
2019/07/04 Python
Tensorflow模型实现预测或识别单张图片
2019/07/19 Python
numpy 声明空数组详解
2019/12/05 Python
python名片管理系统开发
2020/06/18 Python
在IE6系列等老式浏览器中使用HTML5的新标签实现方案
2012/12/25 HTML / CSS
新加坡航空官方网站:Singapore Airlines
2016/10/13 全球购物
Reebok官方旗舰店:美国知名健身品牌锐步
2019/01/07 全球购物
日本著名的服饰鞋帽综合类购物网站:MAGASEEK
2019/01/09 全球购物
Yummie官方网站:塑身衣和衣柜必需品
2019/10/29 全球购物
SQL中where和having的区别
2012/06/17 面试题
行政工作个人的自我评价
2014/02/13 职场文书
自我推荐信范文
2014/05/09 职场文书
动物科学专业求职信
2014/07/27 职场文书
项目投资合作意向书
2014/07/29 职场文书
承诺书范本
2015/01/21 职场文书
2015个人简历自我评价语
2015/03/11 职场文书
检讨书怎么写?
2019/06/21 职场文书
大学校园餐饮创业计划书
2019/08/07 职场文书