全局路由守卫-登录鉴权

300 阅读2分钟
  1. 配置路由表:在配置路由表时,对于需要进行登录鉴权的路由,可以添加一个自定义的 meta 属性,比如 meta: { requiresAuth: true },表示这个路由需要登录鉴权。

  2. 创建全局路由守卫:使用 Vue Router 提供的 beforeEach 钩子函数,在路由跳转之前进行鉴权处理。

  3. 获取用户登录状态:可以通过访问后端 API,或者从本地存储(如 localStorage、Cookie 等)中获取用户的登录状态。

  4. 判断路由是否需要鉴权:检查即将跳转的目标路由的 meta 属性,如果 requiresAuthtrue,则表示需要进行鉴权。

  5. 登录鉴权处理:如果目标路由需要鉴权,且用户已登录,则正常跳转;如果目标路由需要鉴权,但用户未登录,可以跳转到登录页面,并将目标路由的信息作为参数附加在登录页面的 URL 上,方便用户登录后跳转回目标页面;如果目标路由不需要鉴权,则正常跳转。

  6. 登录后跳转:用户登录成功后,可以从 URL 参数中获取目标路由信息,然后跳转到目标路由;如果没有目标路由信息,则跳转到默认页面,比如首页。

在Vue.js中,可以使用全局前置守卫(beforeEach)实现登录鉴权。以下是使用Vue Router实现全局路由守卫的示例:

  1. 首先,在路由配置文件(例如router/index.js)中定义需要登录鉴权的路由。可以通过为需要鉴权的路由添加meta属性,设置requiresAuthtrue来实现:

import Vue from 'vue';

import Router from 'vue-router';

import Home from '@/components/Home';

import Dashboard from '@/components/Dashboard';

Vue.use(Router);

export default new Router({

routes: [

{

path: '/',

name: 'Home',

component: Home

},

{

path: '/dashboard',

name: 'Dashboard',

component: Dashboard,

meta: { requiresAuth: true }, // 需要登录鉴权的路由

},

],

});

  1. 接下来,在main.js文件中定义全局前置守卫(beforeEach):

import Vue from 'vue';

import App from './App';

import router from './router';

// 模拟一个简单的登录状态

const isAuthenticated = false;

// 全局前置守卫

router.beforeEach((to, from, next) => {

// 判断要访问的路由是否需要登录鉴权

if (to.matched.some(record => record.meta.requiresAuth)) {

// 验证用户是否已登录

if (!isAuthenticated) {

// 如果未登录,则重定向到登录页面

next({ name: 'Home' });

} else {

// 如果已登录,允许访问目标页面

next();

}

} else {

// 对于不需要登录鉴权的路由,直接放行

next();

}

});

new Vue({

el: '#app',

router,

components: { App },

template: '<App/>',

});

在这个例子中,当用户尝试访问需要登录鉴权的/dashboard路由时,全局前置守卫会检查用户的登录状态。如果用户未登录,将重定向到登录页面(在这里是Home组件)。如果用户已登录,将允许访问目标页面。