博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
vue router.beforeEach跳转路由验证用户登录状态
阅读量:2240 次
发布时间:2019-05-09

本文共 2919 字,大约阅读时间需要 9 分钟。

使用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()    }})

转载地址:http://lzhbb.baihongyu.com/

你可能感兴趣的文章
SQL教程之嵌套SELECT语句
查看>>
日本語の記号の読み方
查看>>
计算机英语编程中一些单词
查看>>
JavaScript 经典例子
查看>>
判断数据的JS代码
查看>>
js按键事件说明
查看>>
AJAX 初次体验!推荐刚学看这个满好的!
查看>>
AJAX 设计制作 在公司弄的 非得要做出这个养的 真晕!
查看>>
Linux 查看文件大小
查看>>
Java并发编程:线程池的使用
查看>>
redis单机及其集群的搭建
查看>>
Java多线程学习
查看>>
检查Linux服务器性能
查看>>
Java 8新的时间日期库
查看>>
Chrome开发者工具
查看>>
【LEETCODE】102-Binary Tree Level Order Traversal
查看>>
【LEETCODE】106-Construct Binary Tree from Inorder and Postorder Traversal
查看>>
【LEETCODE】202-Happy Number
查看>>
和机器学习和计算机视觉相关的数学
查看>>
十个值得一试的开源深度学习框架
查看>>