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.NET jQuery 实例8 (动态添加内容到DropDownList)
Feb 03 Javascript
Js+Flash实现访问剪切板操作
Nov 20 Javascript
JS+CSS实现弹出全屏灰黑色透明遮罩效果的方法
Dec 20 Javascript
JavaScript实现同步于本地时间的动态时间显示方法
Feb 02 Javascript
Jquery效果大全之制作电脑健康体检得分特效附源码下载
Nov 02 Javascript
vue-cli3脚手架的配置及使用教程
Aug 28 Javascript
Vue 第三方字体图标引入 Font Awesome的方法
Sep 28 Javascript
js操作table中tr的顺序实现上移下移一行的效果
Nov 22 Javascript
jQuery表单元素过滤选择器用法实例分析
Feb 20 jQuery
深入理解使用Vue实现Context-Menu的思考与总结
Mar 09 Javascript
详解50行代码,Node爬虫练手项目
Apr 22 Javascript
详解vue实现坐标拾取器功能示例
Nov 18 Vue.js
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
便携利器 — TECSUN PL-365简评
2021/03/02 无线电
再次研究下cache_lite
2007/02/14 PHP
php curl 登录163邮箱并抓取邮箱好友列表的代码(经测试)
2011/04/07 PHP
浅谈使用 PHP 进行手机 APP 开发(API 接口开发)
2014/08/11 PHP
PHP file_get_contents函数读取远程数据超时的解决方法
2015/05/13 PHP
php轻量级的性能分析工具xhprof的安装使用
2015/08/12 PHP
PHP策略模式定义与用法示例
2017/07/27 PHP
ThinkPHP框架使用redirect实现页面重定向的方法实例分析
2018/04/12 PHP
PHP排序算法之基数排序(Radix Sort)实例详解
2018/04/21 PHP
原生php实现excel文件读写的方法分析
2018/04/25 PHP
PHP实现打包zip并下载功能
2018/06/12 PHP
PHP autoload使用方法及步骤详解
2020/09/05 PHP
弹出广告特效代码(一个IP只弹出一次)
2007/05/11 Javascript
(jQuery,mootools,dojo)使用适合自己的编程别名命名
2010/09/14 Javascript
JavaScript事件类型中焦点、鼠标和滚轮事件详解
2016/01/25 Javascript
JavaScript判断页面加载完之后再执行预定函数的技巧
2016/05/17 Javascript
PHP实现记录代码运行时间封装类实例教程
2017/05/08 Javascript
IE8中jQuery.load()加载页面不显示的原因
2018/11/15 jQuery
JavaScript本地储存:localStorage、sessionStorage、cookie的使用
2020/10/13 Javascript
[02:27]2018DOTA2亚洲邀请赛趣味视频之钓鱼大赛 谁是垂钓冠军?
2018/04/05 DOTA
Python 抓取动态网页内容方案详解
2014/12/25 Python
python实现定时提取实时日志程序
2018/06/22 Python
简单了解python变量的作用域
2019/07/30 Python
python3.7通过thrift操作hbase的示例代码
2020/01/14 Python
Django项目uwsgi+Nginx保姆级部署教程实现
2020/04/19 Python
Python如何将装饰器定义为类
2020/07/30 Python
Python环境使用OpenCV检测人脸实现教程
2020/10/19 Python
详解CSS3中的box-sizing(content-box与border-box)
2019/04/19 HTML / CSS
Agoda中文官网:安可达(低价预订全球酒店)
2021/01/18 全球购物
出纳的岗位职责
2013/11/09 职场文书
大学生入党思想汇报
2014/01/14 职场文书
京剧自荐信
2014/01/26 职场文书
德语专业求职信
2014/03/12 职场文书
活动倡议书范文
2014/05/13 职场文书
交通安全横幅标语
2014/10/07 职场文书
如何自己动手写SQL执行引擎
2021/06/02 MySQL