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 相关文章推荐
彻底搞懂JS无缝滚动代码
Jan 03 Javascript
js实现的网页颜色代码表全集
Jul 17 Javascript
JS 类型转换常见方法小结
May 31 Javascript
使用Javascript接收get传递的值的代码
Nov 30 Javascript
javascript动态加载实现方法一
Aug 22 Javascript
JavaScript实现MIPS乘法模拟的方法
Apr 17 Javascript
移动端点击图片放大特效PhotoSwipe.js插件实现
Aug 25 Javascript
Node.Js中实现端口重用原理详解
May 03 Javascript
微信JS-SDK实现微信会员卡功能(给用户微信卡包里发送会员卡)
Jul 25 Javascript
Vue+Koa2 打包后进行线上部署的教程详解
Jul 31 Javascript
JavaScript中reduce()的5个基本用法示例
Jul 19 Javascript
webpack的移动端适配方案小结
Jul 25 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 self,$this,const,static,->的使用
2009/10/22 PHP
php正则表达式(regar expression)
2011/09/10 PHP
PHP中的strtr函数使用介绍(str_replace)
2011/10/20 PHP
php缓存技术详细总结
2013/08/07 PHP
PHP6 中可能会出现的新特性预览
2014/04/04 PHP
php选择排序法实现数组排序实例分析
2015/02/16 PHP
Linux操作系统安装LAMP环境
2015/06/26 PHP
详解WordPress中简码格式标签编写的基本方法
2015/12/22 PHP
我遇到的参数传递中 双引号单引号嵌套问题
2010/02/11 Javascript
利用ajaxfileupload插件实现文件上传无刷新的具体方法
2013/06/08 Javascript
JS获取图片实际宽高及根据图片大小进行自适应
2013/08/11 Javascript
防止jQuery ajax Load使用缓存的方法小结
2014/02/22 Javascript
如何用jQuery实现ASP.NET GridView折叠伸展效果
2015/09/26 Javascript
ichart.js绘制虚线、平均分虚线效果的实现代码
2016/05/05 Javascript
JS模仿腾讯图片站的图片翻页按钮效果完整实例
2016/06/21 Javascript
AngularJS 实现JavaScript 动画效果详解
2016/09/08 Javascript
微信小程序框架wepy之动态控制类名
2018/09/14 Javascript
Layui动态生成select下拉选择框不显示的解决方法
2019/09/24 Javascript
Vue3.0的优化总结
2020/10/16 Javascript
[48:51]完美世界DOTA2联赛PWL S2 Magma vs InkIce 第一场 11.28
2020/12/02 DOTA
在Python中marshal对象序列化的相关知识
2015/07/01 Python
浅析Python __name__ 是什么
2020/07/07 Python
python 绘制国旗的示例
2020/09/27 Python
HTML5 drag和drop具体使用详解
2021/01/18 HTML / CSS
John Hardy官方网站:手工设计首饰的奢侈品牌
2017/07/05 全球购物
List、Map、Set三个接口,存取元素时,各有什么特点?
2015/09/27 面试题
信息管理专业推荐信
2013/10/29 职场文书
药品质量检测应届生求职信
2013/11/14 职场文书
蔬菜基地的创业计划书
2014/01/06 职场文书
自我评价格式
2014/01/06 职场文书
求职简历的自我评价
2014/01/31 职场文书
给老师的一封建议书
2014/03/13 职场文书
艺术学院毕业生求职信
2014/07/09 职场文书
学校政风行风整改方案
2014/10/25 职场文书
医德医风自我评价2015
2015/03/03 职场文书
Python基础之变量的相关知识总结
2021/06/23 Python