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 iframe编程相关代码
Dec 28 Javascript
JavaScript脚本库编写的方法
Dec 09 Javascript
利用JS实现页面删除并重新排序功能
Dec 09 Javascript
JavaScript表单验证实现代码
May 22 Javascript
利用Ionic2 + angular4实现一个地区选择组件
Jul 27 Javascript
react-native中ListView组件点击跳转的方法示例
Sep 30 Javascript
Ionic学习日记实现验证码倒计时
Feb 08 Javascript
jQuery实现的淡入淡出与滑入滑出效果示例
Apr 18 jQuery
小程序tab页无法传递参数的方法
Aug 03 Javascript
Puppet的一些技巧
Sep 17 Javascript
vue使用echarts画组织结构图
Feb 06 Vue.js
Vue过滤器(filter)实现及应用场景详解
Jun 15 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
php字符串按照单词进行反转的方法
2015/03/14 PHP
thinkphp配置文件路径的实现方法
2016/08/30 PHP
php 处理png图片白色背景色改为透明色的实例代码
2018/12/10 PHP
laravel利用中间件做防非法登录和权限控制示例
2019/10/21 PHP
js+html+css实现鼠标移动div实例
2013/01/30 Javascript
jQuery学习笔记(4)--Jquery中获取table中某列值的具体思路
2013/04/10 Javascript
控制页面按钮在后台执行期间不重复提交的JS方法
2013/06/24 Javascript
javascript的解析执行顺序在各个浏览器中的不同
2014/03/17 Javascript
JavaScript判断数组是否包含指定元素的方法
2015/07/01 Javascript
第七章之菜单按钮图标组件
2016/04/25 Javascript
第一次接触神奇的Bootstrap菜单和导航
2016/08/01 Javascript
全面接触神奇的Bootstrap导航条实战篇
2016/08/01 Javascript
JS使用正则表达式过滤多个词语并替换为相同长度星号的方法
2016/08/03 Javascript
关于JavaScript和jQuery的类型判断详解
2016/10/08 Javascript
ajax与json 获取数据并在前台使用简单实例
2017/01/19 Javascript
JS实现复选框的全选和批量删除功能
2017/04/05 Javascript
微信小程序开发之选项卡(窗口底部TabBar)页面切换
2017/04/12 Javascript
angularJs中datatable实现代码
2017/06/03 Javascript
前端开发不得不知的10个最佳ES6特性
2017/08/30 Javascript
vue 系列——vue2-webpack2框架搭建踩坑之路
2017/12/22 Javascript
解决JSON.stringify()自动将中文转译成unicode的问题
2018/01/05 Javascript
python获取外网ip地址的方法总结
2015/07/02 Python
详解Python3 基本数据类型
2019/04/19 Python
Django接收post前端返回的json格式数据代码实现
2019/07/31 Python
python程序中的线程操作 concurrent模块使用详解
2019/09/23 Python
python多继承(钻石继承)问题和解决方法简单示例
2019/10/21 Python
如何使用Python发送HTML格式的邮件
2020/02/11 Python
pycharm第三方库安装失败的问题及解决经验分享
2020/05/09 Python
用opencv给图片换背景色的示例代码
2020/07/08 Python
viagogo意大利票务平台:演唱会、体育比赛、戏剧门票
2018/01/26 全球购物
彪马法国官网:PUMA法国
2019/12/15 全球购物
数据库方面面试题
2012/04/22 面试题
最美孝心少年事迹材料
2014/08/15 职场文书
教师三严三实对照检查材料
2014/09/25 职场文书
外出培训学习心得体会
2016/01/18 职场文书
Python 数据可视化工具 Pyecharts 安装及应用
2022/04/20 Python