当前位置:首页 > 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实现发送值接受值

vue实现发送值接受值

Vue 实现父子组件传值 父组件向子组件传值(props) 父组件通过 v-bind 或简写 : 向子组件传递数据。子组件通过 props 接收数据。 父组件代码: <template&g…

实现vue组件

实现vue组件

Vue 组件的基本实现 Vue 组件是 Vue.js 的核心特性之一,允许将 UI 拆分为独立、可复用的模块。以下是实现 Vue 组件的几种方式: 单文件组件 (SFC) 使用 .vue 文件格式,…

vue实现方法

vue实现方法

Vue 实现方法 Vue 是一种流行的前端框架,用于构建用户界面和单页应用。以下是几种常见的 Vue 实现方法: 创建 Vue 实例 通过 new Vue() 创建一个 Vue 实例,传入配置对象,…

vue 实现闪烁

vue 实现闪烁

Vue 实现闪烁效果的方法 方法一:使用 CSS 动画 在 Vue 组件中定义一个闪烁的 CSS 动画,通过绑定 class 或 style 来控制元素的闪烁效果。 <template&…

vue实现切换

vue实现切换

Vue 实现切换功能的方法 在 Vue 中实现切换功能可以通过多种方式实现,以下是一些常见的方法: 使用 v-if 和 v-else 指令 通过条件渲染实现切换功能,适用于简单的显示/隐藏场景…

vue实现RTMP

vue实现RTMP

Vue 中实现 RTMP 流播放 RTMP(Real-Time Messaging Protocol)是一种用于实时音视频流传输的协议。在 Vue 中实现 RTMP 播放通常需要借助第三方库或播放器。…