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 相关文章推荐
28个常用JavaScript方法集锦
Jan 14 Javascript
jQuery消息提示框插件Tipso
May 04 Javascript
深入浅出分析javaScript中this用法
May 09 Javascript
浅谈Vue SPA 首屏加载优化实践
Dec 15 Javascript
Javascript将图片的绝对路径转换为base64编码的方法
Jan 11 Javascript
vue+VeeValidate 校验范围实例详解(部分校验,全部校验)
Oct 19 Javascript
vue-cli3全面配置详解
Nov 14 Javascript
Angular CLI 使用教程指南参考小结
Apr 10 Javascript
Vue使用zTree插件封装树组件操作示例
Apr 25 Javascript
Vue中UI组件库之Vuex与虚拟服务器初识
May 07 Javascript
详解Nuxt内导航栏的两种实现方式
Apr 16 Javascript
JS使用for in有序获取对象数据
May 19 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
模拟OICQ的实现思路和核心程序(一)
2006/10/09 PHP
学习discuz php 引入文件的方法DISCUZ_ROOT
2009/06/21 PHP
php 在文件指定行插入数据的代码
2010/05/08 PHP
一个完整的PHP类包含的七种语法说明
2015/06/04 PHP
由php中字符offset特征造成的绕过漏洞详解
2017/07/07 PHP
PHP与JavaScript针对Cookie的读写、交互操作方法详解
2017/08/07 PHP
javascript 冒泡排序 正序和倒序实现代码
2010/12/14 Javascript
JS 删除字符串最后一个字符的实现代码
2014/02/20 Javascript
jquery实现隐藏在左侧的弹性弹出菜单效果
2015/09/18 Javascript
jQuery实现两个select控件的互移操作
2016/12/22 Javascript
Vue.js bootstrap前端实现分页和排序
2017/03/10 Javascript
JavaScript多线程运行库Nexus.js详解
2017/12/22 Javascript
vue watch监听对象及对应值的变化详解
2018/02/24 Javascript
js贪心算法 钱币找零问题代码实例
2019/09/11 Javascript
vue实现表格过滤功能
2019/09/27 Javascript
JS实现商城秒杀倒计时功能(动态设置秒杀时间)
2019/12/12 Javascript
vue实现购物车的监听
2020/04/20 Javascript
vue-i18n实现中英文切换的方法
2020/07/06 Javascript
vue循环中点击选中再点击取消(单选)的实现
2020/09/10 Javascript
vue监听滚动事件的方法
2020/12/21 Vue.js
[08:44]DOTA2发布会群星聚首 我们都是刀塔人
2014/03/21 DOTA
[07:37]DOTA2-DPC中国联赛2月2日Recap集锦
2021/03/11 DOTA
python实现飞机大战微信小游戏
2020/03/21 Python
Python 实现Numpy中找出array中最大值所对应的行和列
2019/11/26 Python
python定义类self用法实例解析
2020/01/22 Python
pycharm全局搜索的具体步骤
2020/07/28 Python
Python安装并操作redis实现流程详解
2020/10/13 Python
Django admin组件的使用
2020/10/24 Python
介绍一下Prototype的$()函数,$F()函数,$A()函数都是什么作用?
2014/03/05 面试题
外语专业毕业生自我评价分享
2013/10/05 职场文书
《窗前的气球》教学反思
2014/04/07 职场文书
生物工程专业求职信
2014/09/03 职场文书
奖学金感谢信
2015/01/21 职场文书
MySQL 分页查询的优化技巧
2021/05/12 MySQL
weblogic服务建立数据源连接测试更新mysql驱动包的问题及解决方法
2022/01/22 MySQL
三种方式清除vue路由跳转router-link的历史记录
2022/04/10 Vue.js