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 相关文章推荐
node.js中的console.warn方法使用说明
Dec 09 Javascript
jquery实现无限分级横向导航菜单的方法
Mar 12 Javascript
iframe跨域通信封装详解
Aug 11 Javascript
学习使用AngularJS文件上传控件
Feb 16 Javascript
原生js实现网易轮播图效果
Apr 10 Javascript
Bootstrap导航条学习使用(一)
Feb 08 Javascript
关于单文件组件.vue的使用
Sep 20 Javascript
浅谈Vuex注入Vue生命周期的过程
May 20 Javascript
小程序实现搜索框功能
Mar 26 Javascript
JS实现TITLE悬停长久显示效果完整示例
Feb 11 Javascript
Vue的Options用法说明
Aug 14 Javascript
详解JS WebSocket断开原因和心跳机制
May 07 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 获取本地IP代码
2013/06/23 PHP
PHP中if和or运行效率对比
2014/12/12 PHP
php版交通银行网银支付接口开发入门教程
2016/09/26 PHP
破解Session cookie的方法
2006/07/28 Javascript
兼容Mozilla必须知道的知识。
2007/01/09 Javascript
JavaScript语言中的Literal Syntax特性分析
2007/03/08 Javascript
统计出现最多的字符次数的js代码
2010/12/03 Javascript
javasctipt如何显示几分钟前、几天前等
2014/04/30 Javascript
Bootstrap基本组件学习笔记之缩略图(13)
2016/12/08 Javascript
JavaScript实现省市县三级级联特效
2017/05/16 Javascript
基于Bootstrap的标签页组件及bootstrap-tab使用说明
2017/07/25 Javascript
Angular实现图片裁剪工具ngImgCrop实践
2017/08/17 Javascript
[46:40]VGJ.T vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
python搭建微信公众平台
2016/02/09 Python
深入浅析python中的多进程、多线程、协程
2016/06/22 Python
Python 类的继承实例详解
2017/03/25 Python
Python3使用PyQt5制作简单的画板/手写板实例
2017/10/19 Python
Python判断两个对象相等的原理
2017/12/12 Python
Python实现翻转数组功能示例
2018/01/12 Python
Python常用字符串替换函数strip、replace及sub用法示例
2018/05/21 Python
Python匿名函数及应用示例
2019/04/09 Python
Python爬虫之App爬虫视频下载的实现
2020/12/08 Python
python实现按日期归档文件
2021/01/30 Python
夏洛特和乔治婴儿和儿童时装精品店:Charlotte and George
2018/06/06 全球购物
竞选演讲稿范文大全
2014/05/12 职场文书
团结演讲稿范文
2014/05/23 职场文书
小学先进集体事迹材料
2014/05/31 职场文书
淘宝活动总结范文
2014/06/26 职场文书
政协会议宣传标语
2014/10/09 职场文书
安阳殷墟导游词
2015/02/10 职场文书
大学生英文求职信范文
2015/03/19 职场文书
国庆放假通知怎么写
2015/07/30 职场文书
校园之声广播稿
2015/08/18 职场文书
如何书写授权委托书?
2019/06/25 职场文书
python树莓派通过队列实现进程交互的程序分析
2021/07/04 Python
Vue监视数据的原理详解
2022/02/24 Vue.js