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 相关文章推荐
不错的asp中显示新闻的功能
Oct 13 Javascript
javascript中parentNode,childNodes,children的应用详解
Dec 17 Javascript
学习JavaScript设计模式之单例模式
Jan 19 Javascript
jquery validate表单验证插件
Sep 06 Javascript
jQuery获取Table某列的值(推荐)
Mar 03 Javascript
js 获取今天以及过去日期
Apr 11 Javascript
微信小程序使用radio显示单选项功能【附源码下载】
Dec 11 Javascript
使用vue-router完成简单导航功能【推荐】
Jun 28 Javascript
C#程序员入门学习微信小程序的笔记
Mar 05 Javascript
了解JavaScript表单操作和表单域
May 27 Javascript
解决vue项目input输入框双向绑定数据不实时生效问题
Aug 05 Javascript
如何在selenium中使用js实现定位
Aug 18 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截取汉字乱码问题解决方法mb_substr函数的应用
2008/03/30 PHP
php目录管理函数小结
2008/09/10 PHP
使用VisualStudio开发php的图文设置方法
2010/08/21 PHP
PHP 小心urldecode引发的SQL注入漏洞
2011/10/27 PHP
php数组函数序列之array_unique() - 去除数组中重复的元素值
2011/10/29 PHP
ThinkPHP3.1的Widget新用法
2014/06/19 PHP
thinkphp3.x自定义Action、Model及View的简单实现方法
2016/05/19 PHP
php 如何禁用eval() 函数实例详解
2016/12/01 PHP
利用PHPExcel读取Excel的数据和导出数据到Excel
2017/05/12 PHP
php解决约瑟夫环算法实例分析
2019/09/30 PHP
css3实现背景模糊的三种方式
2021/03/09 HTML / CSS
基于jQuery试卷自动排版系统
2010/07/18 Javascript
javascript判断iphone/android手机横竖屏模式的函数
2011/12/20 Javascript
轻松学习jQuery插件EasyUI EasyUI创建树形菜单
2015/11/30 Javascript
jQuery简单操作cookie的插件实例
2016/01/13 Javascript
vue.js入门(3)——详解组件通信
2016/12/02 Javascript
canvas实现钟表效果
2017/02/13 Javascript
vue 基于element-ui 分页组件封装的实例代码
2018/12/10 Javascript
详解Express笔记之动态渲染HTML(新手入坑)
2018/12/13 Javascript
JavaScript如何实现元素全排列实例代码
2019/05/14 Javascript
解决layer 关闭当前弹窗 关闭遮罩层 input值获取不到的问题
2019/09/25 Javascript
js实现贪吃蛇游戏(简易版)
2020/09/29 Javascript
python连接oracle数据库实例
2014/10/17 Python
OpenCV实现人脸识别
2017/04/07 Python
Python中shape计算矩阵的方法示例
2017/04/21 Python
Python装饰器(decorator)定义与用法详解
2018/02/09 Python
记一次Django响应超慢的解决过程
2020/09/17 Python
使用CSS3配合IE滤镜实现渐变和投影的效果
2015/09/06 HTML / CSS
Molly Bracken法国电子商店:法国女性时尚品牌
2019/07/24 全球购物
美国牙科折扣计划:DentalPlans.com
2019/08/26 全球购物
企业办公室主任岗位职责
2014/02/19 职场文书
土建施工员岗位职责
2014/07/16 职场文书
关于感恩的演讲稿500字
2014/08/26 职场文书
乔布斯辞职信(中英文对照)
2015/05/12 职场文书
复兴之路观后感
2015/06/02 职场文书
《神奇的鸟岛》教学反思
2016/02/22 职场文书