当前位置:首页 > VUE

vue实现登录路由拦截

2026-02-23 01:58:40VUE

路由拦截实现原理

Vue中实现登录路由拦截主要依赖Vue Router的导航守卫功能。通过全局前置守卫beforeEach,可以在路由跳转前进行权限校验,未登录用户访问受限路由时重定向到登录页。

安装Vue Router

确保项目已安装Vue Router。若未安装,可通过以下命令安装:

npm install vue-router

配置路由文件

在router/index.js中配置基本路由和需要权限校验的路由:

vue实现登录路由拦截

import Vue from 'vue'
import Router from 'vue-router'
import Login from '@/views/Login.vue'
import Home from '@/views/Home.vue'

Vue.use(Router)

const router = new Router({
  routes: [
    {
      path: '/login',
      name: 'Login',
      component: Login
    },
    {
      path: '/home',
      name: 'Home',
      component: Home,
      meta: { requiresAuth: true } // 添加路由元信息标识需要登录
    }
  ]
})

实现导航守卫

在router/index.js中添加全局前置守卫:

router.beforeEach((to, from, next) => {
  const isAuthenticated = localStorage.getItem('token') // 假设token存储在localStorage
  if (to.matched.some(record => record.meta.requiresAuth)) {
    if (!isAuthenticated) {
      next({ path: '/login', query: { redirect: to.fullPath } })
    } else {
      next()
    }
  } else {
    next()
  }
})

登录逻辑处理

在登录组件中,登录成功后跳转到原访问页面或默认页面:

vue实现登录路由拦截

methods: {
  handleLogin() {
    // 模拟登录成功
    localStorage.setItem('token', 'mock-token')
    const redirect = this.$route.query.redirect || '/home'
    this.$router.push(redirect)
  }
}

路由白名单配置

对于无需校验的公开路由(如登录页、注册页),可配置白名单避免循环重定向:

const whiteList = ['/login', '/register']

router.beforeEach((to, from, next) => {
  const hasToken = localStorage.getItem('token')
  if (hasToken) {
    if (to.path === '/login') {
      next({ path: '/' })
    } else {
      next()
    }
  } else {
    if (whiteList.includes(to.path)) {
      next()
    } else {
      next(`/login?redirect=${to.path}`)
    }
  }
})

动态路由权限控制

如需根据用户角色动态生成路由,可结合addRoutes方法:

// 在登录成功后
import { adminRoutes, userRoutes } from './dynamicRoutes'

router.addRoutes(userHasAdminRole ? adminRoutes : userRoutes)

退出登录处理

清除认证信息并重定向到登录页:

logout() {
  localStorage.removeItem('token')
  this.$router.push('/login')
}

注意事项

  1. 敏感路由应始终在服务端进行二次验证
  2. 避免将认证令牌仅存储在客户端
  3. 考虑使用Vuex集中管理认证状态
  4. 对于SPA应用,需配置服务器避免直接访问路由返回404

标签: 路由vue
分享给朋友:

相关文章

vue实现mvc

vue实现mvc

Vue 实现 MVC 模式 Vue 本身是一个 MVVM(Model-View-ViewModel)框架,但可以通过结构调整实现 MVC(Model-View-Controller)模式。以下是具体实…

vue 实现复选

vue 实现复选

Vue 实现复选功能 在 Vue 中实现复选功能可以通过多种方式完成,以下是常见的几种方法: 使用 v-model 绑定数组 通过 v-model 绑定一个数组,可以自动收集用户选择的复选框值。…

vue实现toast

vue实现toast

Vue 实现 Toast 的方法 使用第三方库(推荐) 对于快速实现 Toast 功能,推荐使用成熟的第三方库如 vue-toastification 或 vant 的 Toast 组件。 安装 v…

vue 实现轮播

vue 实现轮播

Vue 实现轮播的方法 使用第三方库(如 Swiper) 安装 Swiper 库: npm install swiper 在 Vue 组件中引入 Swiper: <template>…

vue实现slidetoggle

vue实现slidetoggle

Vue 实现 SlideToggle 效果 SlideToggle 是一种常见的交互效果,元素以滑动方式展开或收起。以下是几种实现方法: 使用 CSS Transition 和 v-show…

vue实现flbook

vue实现flbook

Vue 实现类似 Flbook 的翻页效果 要实现类似 Flbook 的翻页效果,可以使用 Vue 结合 CSS 动画和 JavaScript 事件处理。以下是实现方法: 安装依赖 需要安装 vue…