当前位置:首页 > VUE

vue router实现登录

2026-03-08 08:04:59VUE

Vue Router 实现登录功能

配置路由守卫

在 Vue Router 中,可以使用导航守卫(Navigation Guards)来控制路由访问权限。全局前置守卫 beforeEach 可以检查用户是否登录,未登录则重定向到登录页面。

// router/index.js
import { createRouter, createWebHistory } from 'vue-router'

const routes = [
  { path: '/login', component: () => import('@/views/Login.vue') },
  { path: '/dashboard', component: () => import('@/views/Dashboard.vue'), meta: { requiresAuth: true } }
]

const router = createRouter({
  history: createWebHistory(),
  routes
})

router.beforeEach((to, from, next) => {
  const isAuthenticated = localStorage.getItem('token') // 检查登录状态
  if (to.matched.some(record => record.meta.requiresAuth) && !isAuthenticated) {
    next('/login') // 需要登录但未登录,重定向到登录页
  } else {
    next() // 放行
  }
})

export default router

登录逻辑实现

在登录页面组件中,处理用户登录逻辑,成功后存储 token 并跳转到目标页面。

// views/Login.vue
<script setup>
import { ref } from 'vue'
import { useRouter } from 'vue-router'

const router = useRouter()
const username = ref('')
const password = ref('')

const handleLogin = async () => {
  try {
    // 调用登录API
    const response = await loginApi(username.value, password.value)
    localStorage.setItem('token', response.data.token) // 存储token
    router.push('/dashboard') // 跳转到受保护页面
  } catch (error) {
    console.error('登录失败', error)
  }
}
</script>

动态路由加载

对于更复杂的权限系统,可以根据用户角色动态加载路由。

// 动态路由示例
function setupDynamicRoutes(userRole) {
  const adminRoutes = [
    { path: '/admin', component: () => import('@/views/Admin.vue') }
  ]

  if (userRole === 'admin') {
    router.addRoute(adminRoutes[0]) // 添加管理员路由
  }
}

// 登录成功后调用
setupDynamicRoutes(user.role)

退出登录处理

实现退出功能时需要清除认证信息并重定向。

// 退出登录函数
const handleLogout = () => {
  localStorage.removeItem('token') // 清除token
  router.push('/login') // 跳转到登录页
}

认证状态管理

对于大型应用,建议使用 Vuex 或 Pinia 集中管理认证状态。

vue router实现登录

// stores/auth.js (Pinia示例)
import { defineStore } from 'pinia'

export const useAuthStore = defineStore('auth', {
  state: () => ({
    token: localStorage.getItem('token') || null
  }),
  actions: {
    login(token) {
      this.token = token
      localStorage.setItem('token', token)
    },
    logout() {
      this.token = null
      localStorage.removeItem('token')
    }
  }
})

这些方法组合起来可以构建完整的 Vue Router 登录认证系统,根据项目需求选择适合的方案。

标签: vuerouter
分享给朋友:

相关文章

vue工序实现

vue工序实现

Vue 工序实现方法 在Vue中实现工序(或流程)功能,通常涉及状态管理、组件通信和动态渲染。以下是几种常见方法: 使用动态组件 通过Vue的<component :is="currentCo…

vue实现单击

vue实现单击

Vue 实现单击事件的方法 在 Vue 中实现单击事件可以通过 v-on 指令或简写的 @ 符号绑定事件处理器。以下是几种常见的实现方式: 基础用法 通过 v-on:click 或 @click 绑…

vue实现hexo

vue实现hexo

Vue 集成 Hexo 的实现方法 Hexo 是一个静态博客框架,而 Vue 是一个前端框架。将 Vue 集成到 Hexo 中可以通过以下方式实现: 在 Hexo 中使用 Vue 组件 通过 Hex…

vue计算属性 实现

vue计算属性 实现

Vue 计算属性的实现 计算属性(Computed Properties)是 Vue 中的一个核心功能,用于声明式地定义依赖其他属性的值。计算属性会缓存结果,只有当依赖的响应式数据发生变化时才会重新计…

vue点击实现动画

vue点击实现动画

Vue 中实现点击动画的方法 使用 Vue 过渡(Transition)组件 Vue 提供了内置的 <transition> 组件,可以轻松实现元素进入/离开的动画效果。结合 v-if 或…

vue实现折叠组件

vue实现折叠组件

Vue 折叠组件实现方法 基于 v-show 和事件触发 通过 v-show 控制内容的显示与隐藏,结合点击事件切换状态。 <template> <div> &…