Vue router -- 路由登录拦截 / 路由守卫

1,008 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第30天,点击查看活动详情

路由守卫

导航守卫就是路由跳转过程中的函数,来完成页面路由跳转这一过程。

这个过程分为跳转前、跳转中、跳转后等,在每一个过程中都有对应的函数,这些函数能让你在这个时刻做一下操作。比如跳转前是否验证登录等。

全局前置守卫 beforeEach()

beforeEach()是路由实例上直接操作的钩子函数,触发路由就会触发。

beforeEach() 一般用来做一些进入页面的限制;

beforeEach() 有三个参数,to, from, next;

to: 即将要进入的目标路由对象;

from: 当前导航正要离开的路由;

next(): 进行管道中的下一个钩子;

路由独享守卫 beforeEnter()

beforeEnter()是在单个路由配置的时候也可以设置的钩子函数;

在路由配置上直接定义 beforeEnter ()beforeEnter和 beforeEach 完全相同,参数也是参数tofromnext

to: 即将要进入的目标路由对象;

from: 当前导航正要离开的路由;

next(): 进行管道中的下一个钩子;

小案例

验证用户登录状态,未登陆时只允许用户访问登录页和注册页,登录成功直接跳转到首页;

示例代码:

	const routes = [
	  {
	    //注册页
	    path: '/register',
	    name: 'Register',
	    component: () => import(/* webpackChunkName: "Register" */ '..//views/Register/Register'),
	    beforeEnter(to, from, next){
	      const { isLogin } = localStorage;
	      //登录跳转至首页
	      isLogin ? next({ name : 'Home'}): next();
	    }
	  },
	  {
	    //登陆页
	    path: '/login',
	    name: 'Login',
	    component: () => import(/* webpackChunkName: "Login" */ '../views/Login/Login'),
	    beforeEnter(to, from, next){
	      const { isLogin } = localStorage;
	      //登录跳转至首页
	      isLogin ? next({ name : 'Home'}): next();
	    }
	  },
	]
	router.beforeEach((to, from, next) => {
	  const { isLogin } = localStorage;
	  // 用户未登陆只允许访问登录页和注册页
	  if(!isLogin && (to.name !== "Login" && to.name !== "Register"))
	  {
	    //未登录自动跳转至登录页
	    next({ name : 'Login'});
	  }else{
	    next();
	  }
	})

本文到此结束

如果大家还有什么其他想法,欢迎在评论区交流!