当前位置:首页 > VUE

vue路由实现登录

2026-01-15 05:19:25VUE

路由守卫实现登录验证

在Vue项目中,可以通过路由守卫(Navigation Guards)来实现登录验证逻辑。路由守卫能在路由跳转前、跳转后或跳转时进行拦截处理。

安装路由依赖

npm install vue-router

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

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

Vue.use(Router)

const router = new Router({
  routes: [
    { path: '/login', component: Login },
    { path: '/dashboard', component: Dashboard, meta: { requiresAuth: true } }
  ]
})

全局前置守卫

使用router.beforeEach实现全局登录验证:

router.beforeEach((to, from, next) => {
  const isAuthenticated = localStorage.getItem('token')

  if (to.matched.some(record => record.meta.requiresAuth)) {
    if (!isAuthenticated) {
      next('/login')
    } else {
      next()
    }
  } else {
    next()
  }
})

登录状态管理

结合Vuex可以更好地管理登录状态:

store/auth.js

export default {
  state: {
    user: null,
    token: null
  },
  mutations: {
    setUser(state, user) {
      state.user = user
    },
    setToken(state, token) {
      state.token = token
      localStorage.setItem('token', token)
    },
    logout(state) {
      state.user = null
      state.token = null
      localStorage.removeItem('token')
    }
  }
}

登录组件实现

Login.vue示例

<template>
  <div>
    <form @submit.prevent="login">
      <input v-model="username" placeholder="Username">
      <input v-model="password" type="password" placeholder="Password">
      <button type="submit">Login</button>
    </form>
  </div>
</template>

<script>
export default {
  data() {
    return {
      username: '',
      password: ''
    }
  },
  methods: {
    async login() {
      try {
        const response = await api.login(this.username, this.password)
        this.$store.commit('setToken', response.data.token)
        this.$router.push('/dashboard')
      } catch (error) {
        console.error('Login failed', error)
      }
    }
  }
}
</script>

动态路由加载

对于权限复杂的系统,可以动态加载路由:

function loadRoutes() {
  const userRole = store.getters.userRole
  const routes = []

  if (userRole === 'admin') {
    routes.push({
      path: '/admin',
      component: () => import('@/views/Admin.vue')
    })
  }

  router.addRoutes(routes)
}

路由元信息控制

通过路由的meta字段可以更灵活地控制权限:

{
  path: '/admin',
  component: Admin,
  meta: {
    requiresAuth: true,
    requiredRoles: ['admin']
  }
}

然后在全局守卫中检查:

router.beforeEach((to, from, next) => {
  const userRole = store.getters.userRole

  if (to.matched.some(record => record.meta.requiredRoles)) {
    if (!record.meta.requiredRoles.includes(userRole)) {
      next('/unauthorized')
      return
    }
  }

  next()
})

退出登录处理

实现退出功能时需要清除状态并重定向:

vue路由实现登录

methods: {
  logout() {
    this.$store.commit('logout')
    this.$router.push('/login')
  }
}

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

相关文章

在线脑图 vue 实现

在线脑图 vue 实现

在线脑图 Vue 实现方案 使用开源库实现 推荐使用 mind-elixir 或 jsmind 这类开源库,它们专为脑图设计且支持 Vue 集成。 安装依赖: npm install mi…

vue实现suspense

vue实现suspense

Vue 3 中实现 Suspense Suspense 是 Vue 3 引入的一个内置组件,用于处理异步依赖的加载状态。它允许在等待异步组件或异步数据加载时显示一个后备内容(fallback),直到异…

实现简单vue

实现简单vue

实现一个简单的 Vue.js 框架 Vue.js 的核心功能包括数据绑定、响应式系统和虚拟 DOM。以下是一个简化版的 Vue 实现,涵盖基本功能。 数据响应式系统 使用 Object.define…

vue实现数据

vue实现数据

Vue 实现数据绑定的方法 Vue.js 提供了多种方式实现数据绑定,包括双向绑定、单向绑定以及动态数据绑定。以下是几种常见的实现方式: 双向数据绑定(v-model) 双向数据绑定通常用于表单元素…

vue实现多线程

vue实现多线程

Vue.js 本身是单线程框架,但可以通过以下方法实现类似多线程的效果或利用浏览器多线程能力: 使用 Web Worker Web Worker 是浏览器提供的多线程 API,适合处理 CPU 密集…

vue实现搜索过滤

vue实现搜索过滤

Vue 实现搜索过滤 使用计算属性实现搜索过滤 在 Vue 中,计算属性(computed)是实现搜索过滤的常见方法。通过计算属性动态过滤数据,无需修改原始数据。 <template>…