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 相关文章推荐
ExtJs之带图片的下拉列表框插件
Mar 04 Javascript
javaScript NameSpace 简单说明介绍
Jul 18 Javascript
调用HttpHanlder的几种返回方式小结
Dec 20 Javascript
ReactNative之键盘Keyboard的弹出与消失示例
Jul 11 Javascript
使用vue实现简单键盘的示例(支持移动端和pc端)
Dec 25 Javascript
js隐式转换的知识实例讲解
Sep 28 Javascript
利用JS动态生成隔行换色HTML表格的两种方法
Oct 09 Javascript
简述vue路由打开一个新的窗口的方法
Nov 29 Javascript
Vue解析剪切板图片并实现发送功能
Feb 04 Javascript
解决Vue的项目使用Element ui 走马灯无法实现的问题
Aug 03 Javascript
js+canvas绘制图形验证码
Sep 21 Javascript
JS实现纸牌发牌动画
Jan 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
非常精妙的PHP递归调用与静态变量使用
2012/12/16 PHP
YII中assets的使用示例
2014/07/31 PHP
避免Smarty与CSS语法冲突的方法
2015/03/02 PHP
PHP递归遍历文件夹去除注释并压缩php源代码的方法示例
2018/05/23 PHP
PHP调用微博接口实现微博登录的方法示例
2018/09/22 PHP
PHP使用CURL实现下载文件功能示例
2019/06/03 PHP
Mootools 1.2 手风琴(Accordion)教程
2009/09/15 Javascript
jquery 问答知识整理
2010/02/11 Javascript
js 异步操作回调函数如何控制执行顺序
2013/12/24 Javascript
js通过八个点 拖动改变div大小的实现方法
2014/03/05 Javascript
JavaScript中this的9种应用场景及三种复合应用场景
2015/09/12 Javascript
快速掌握WordPress中加载JavaScript脚本的方法
2015/12/17 Javascript
jquery checkbox无法用attr()二次勾选问题的解决方法
2016/07/22 Javascript
微信小程序实现页面浮动导航
2019/01/28 Javascript
[51:52]Liquid vs Secret 2019国际邀请赛淘汰赛 败者组 BO3 第二场 8.24
2019/09/10 DOTA
Python的加密模块md5、sha、crypt使用实例
2014/09/28 Python
初步理解Python进程的信号通讯
2015/04/09 Python
Using Django with GAE Python 后台抓取多个网站的页面全文
2016/02/17 Python
Python复数属性和方法运算操作示例
2017/07/21 Python
基于python实现名片管理系统
2018/11/30 Python
对Python的zip函数妙用,旋转矩阵详解
2018/12/13 Python
python微信聊天机器人改进版(定时或触发抓取天气预报、励志语录等,向好友推送)
2019/04/25 Python
使用TensorBoard进行超参数优化的实现
2020/07/06 Python
Python-openpyxl表格读取写入的案例详解
2020/11/02 Python
Python爬虫自动化获取华图和粉笔网站的错题(推荐)
2021/01/08 Python
美国汽车交易网站:Edmunds
2016/08/17 全球购物
Lampenwelt德国:欧洲领先的灯具和照明在线商店
2018/08/05 全球购物
日本乐天德国站:Rakuten.de
2019/05/16 全球购物
说一下Linux下有关用户和组管理的命令
2016/01/04 面试题
Java文件和目录(IO)操作
2014/08/26 面试题
迟到检讨书大全
2014/01/25 职场文书
物理专业大学生职业生涯规划书
2014/02/07 职场文书
小学生综合素质评语
2014/04/23 职场文书
银行柜员求职自荐书
2014/06/18 职场文书
医德医风个人总结
2015/02/28 职场文书
初中体育课教学反思
2016/02/16 职场文书