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 相关文章推荐
Jquery Ajax学习实例 向页面发出请求,返回XML格式数据
Mar 14 Javascript
JavaScript获取当前网页最后修改时间的方法
Apr 03 Javascript
js实现上传图片及时预览
May 07 Javascript
jQuery Ajax使用FormData对象上传文件的方法
Sep 07 Javascript
js 单引号替换成双引号,双引号替换成单引号的实现方法
Feb 16 Javascript
jQuery 添加样式属性的优先级别方法(推荐)
Jun 08 jQuery
JS禁止浏览器右键查看元素或按F12审查元素自动关闭页面示例代码
Sep 07 Javascript
对于js垃圾回收机制的理解
Sep 14 Javascript
vue 2.x 中axios 封装的get 和post方法
Feb 28 Javascript
浅谈Webpack下多环境配置的思路
Jun 27 Javascript
详解vscode中vue代码颜色插件
Oct 11 Javascript
使用Three.js实现太阳系八大行星的自转公转示例代码
Apr 09 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正则表达式获取内容所有链接
2015/07/24 PHP
JavaScript中的其他对象
2008/01/16 Javascript
a标签click和href执行顺序探讨
2014/06/23 Javascript
nodejs教程之环境安装及运行
2014/11/21 NodeJs
使用jquery菜单插件HoverTree仿京东无限级菜单
2014/12/18 Javascript
js面向对象之公有、私有、静态属性和方法详解
2015/04/17 Javascript
Jquery1.9.1源码分析系列(六)延时对象应用之jQuery.ready
2015/11/24 Javascript
jquery实现页面常用的返回顶部效果
2016/03/04 Javascript
JavaScript中最容易混淆的作用域、提升、闭包知识详解(推荐)
2016/09/05 Javascript
jQuery实现的滑块滑动导航效果示例
2018/06/04 jQuery
vue表单自定义校验规则介绍
2018/08/28 Javascript
详解ES6 系列之异步处理实战
2018/10/26 Javascript
Node.js 实现简单的无侵入式缓存框架的方法
2019/07/21 Javascript
Echarts实现多条折线可拖拽效果
2019/12/19 Javascript
基于Element封装一个表格组件tableList的使用方法
2020/06/29 Javascript
JS canvas实现画板和签字板功能
2021/02/23 Javascript
OpenCV实现人脸识别
2017/04/07 Python
Linux下Python安装完成后使用pip命令的详细教程
2018/11/22 Python
Python实现爬取马云的微博功能示例
2019/02/16 Python
使用python itchat包爬取微信好友头像形成矩形头像集的方法
2019/02/21 Python
python三方库之requests的快速上手
2019/03/04 Python
Python实现带下标索引的遍历操作示例
2019/05/30 Python
win10安装python3.6的常见问题
2020/07/01 Python
css3学习之2D转换功能详解
2016/12/23 HTML / CSS
英国DIY和家居装饰领域的主要品牌:Wickes
2019/11/26 全球购物
将一个文本文件的内容按倒序打印出来
2015/01/05 面试题
婚假请假条格式及范文
2014/04/10 职场文书
竞选班长的演讲稿
2014/04/24 职场文书
党支部换届选举方案
2014/05/08 职场文书
摄影专业毕业生求职信
2014/08/05 职场文书
县级领导干部开展党的群众路线教育实践活动工作汇报
2014/10/25 职场文书
店铺转让协议书
2014/12/02 职场文书
皇城相府导游词
2015/02/06 职场文书
2015年妇产科工作总结
2015/05/18 职场文书
2015年七夕情人节感言
2015/08/03 职场文书
vite+vue3.0+ts+element-plus快速搭建项目的实现
2021/06/24 Vue.js