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的下拉框改变动态添加和删除表格实现代码
Sep 12 Javascript
JS模块与命名空间的介绍
Mar 22 Javascript
处理及遍历XML文档DOM元素属性及方法整理
Aug 23 Javascript
原生javascript图片自动或手动切换示例附演示源码
Sep 04 Javascript
用javascript关闭本窗口技巧小结
Sep 05 Javascript
JavaScript获得url查询参数的方法
Jul 02 Javascript
jQuery实现响应鼠标事件的图片透明效果【附demo源码下载】
Jun 16 Javascript
利用jQuery的动画函数animate实现豌豆发射效果
Aug 28 Javascript
微信小程序 HTTPS报错整理常见问题及解决方案
Dec 14 Javascript
一个Vue视频媒体多段裁剪组件的实现示例
Aug 09 Javascript
ElementUI中el-tree节点的操作的实现
Feb 27 Javascript
js、jquery实现列表模糊搜索功能过程解析
Mar 27 jQuery
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
手把手教你使用DedeCms V3的在线采集图文教程
2007/04/03 PHP
php 文件夹删除、php清除缓存程序
2009/08/25 PHP
PHP数据流应用的一个简单实例
2012/09/14 PHP
PHP延迟静态绑定示例分享
2014/06/22 PHP
浅谈PHP接收POST数据方式
2015/06/05 PHP
php 一维数组的循环遍历实现代码
2017/04/10 PHP
解决Jquery load()加载GB2312页面时出现乱码的两种方案
2013/09/10 Javascript
关于删除时的提示处理(确定删除吗)
2013/11/03 Javascript
JavaScript 学习笔记之操作符(续)
2015/01/14 Javascript
解决jQuery使用JSONP时产生的错误
2015/12/02 Javascript
深入探究AngularJS框架中Scope对象的超级教程
2016/01/04 Javascript
javascript实现数组去重的多种方法
2016/03/14 Javascript
原生JavaScript编写canvas版的连连看游戏
2016/05/29 Javascript
js 声明数组和向数组中添加对象变量的简单实例
2016/07/28 Javascript
基于JSON格式数据的简单jQuery幻灯片插件(jquery-slider)
2016/08/10 Javascript
利用jsonp跨域调用百度js实现搜索框智能提示
2016/08/24 Javascript
让html元素随浏览器的大小自适应垂直居中的实现方法
2016/10/12 Javascript
JavaScript限定范围拖拽及自定义滚动条应用(3)
2017/05/17 Javascript
详解Vue 2.0封装axios笔记
2017/06/22 Javascript
angularjs实现过滤并替换关键字小功能
2017/09/19 Javascript
微信小程序中post方法与get方法的封装
2017/09/26 Javascript
JavaScript基于面向对象实现的猜拳游戏
2018/01/03 Javascript
vue实现分页栏效果
2019/06/28 Javascript
vue源码中的检测方法的实现
2019/09/26 Javascript
深入理解Python3中的http.client模块
2017/03/29 Python
python Opencv将图片转为字符画
2021/02/19 Python
使用Python 统计高频字数的方法
2019/01/31 Python
Python实现基于socket的udp传输与接收功能详解
2019/11/15 Python
pyinstaller打包成无控制台程序时运行出错(与popen冲突的解决方法)
2020/04/15 Python
html5在移动端的屏幕适应问题示例探讨
2014/06/15 HTML / CSS
Html5实现移动端、PC端 刮刮卡效果
2016/06/30 HTML / CSS
西班牙网上书店:Casa del Libro
2016/11/01 全球购物
德国高品质男装及配饰商城:Cultizm(Raw Denim原色牛仔裤)
2018/04/16 全球购物
机电专业个人自荐信格式模板
2013/09/23 职场文书
夜大毕业生自我鉴定
2013/10/31 职场文书
python实现的web监控系统
2021/04/27 Python