当前位置:首页 > 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中实现下载暂停功能,通常需要结合XMLHttpRequest或Fetch API的AbortController来控制请求中断。以下是具体实现方法: 使用XMLHtt…

vue自己实现下拉导航

vue自己实现下拉导航

实现下拉导航的基本思路 在Vue中实现下拉导航,可以通过结合Vue的响应式数据和事件绑定特性来完成。主要思路是利用v-show或v-if控制下拉菜单的显示与隐藏,并通过鼠标事件或点击事件触发状态变化。…

vue实现建模

vue实现建模

Vue 实现建模的方法 在 Vue 中实现建模通常涉及数据绑定、组件化和状态管理。以下是几种常见的方法: 数据驱动建模 Vue 的核心是数据驱动视图。通过定义数据模型,Vue 会自动更新 DOM。例…

vue compile 实现

vue compile 实现

Vue 编译实现原理 Vue 的编译过程将模板字符串转换为渲染函数,主要分为解析、优化和代码生成三个阶段。 解析阶段(Parse) 将模板字符串转换为抽象语法树(AST)。Vue 使用正则表达式和有…

vue实现水印

vue实现水印

Vue 实现水印的方法 使用 CSS 背景图 通过 CSS 的 background-image 和 background-repeat 属性实现水印效果。创建一个包含水印文本的 Canvas,将其转…

vue实现编辑

vue实现编辑

Vue 实现编辑功能 在 Vue 中实现编辑功能通常涉及表单绑定、状态管理和事件处理。以下是一个常见的实现方法: 双向数据绑定 使用 v-model 指令实现表单元素与数据的双向绑定: <i…