当前位置:首页 > VUE

vue router实现登录

2026-02-11 08:24:30VUE

Vue Router 实现登录功能

在 Vue.js 应用中,使用 Vue Router 实现登录功能通常涉及路由守卫、权限控制和状态管理。以下是实现登录功能的关键步骤:

配置路由守卫

在路由配置中设置全局前置守卫 (beforeEach),检查用户是否已登录。未登录用户尝试访问受限页面时,重定向到登录页面。

// 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((to, from, next) => {
  const isAuthenticated = localStorage.getItem('token') // 或其他认证状态检查
  if (to.matched.some(record => record.meta.requiresAuth) && !isAuthenticated) {
    next('/login')
  } else {
    next()
  }
})

export default router

创建登录组件

实现登录表单,处理用户凭据提交,并在成功登录后存储认证令牌并重定向。

vue router实现登录

<!-- views/Login.vue -->
<template>
  <div>
    <form @submit.prevent="login">
      <input v-model="username" type="text" placeholder="用户名">
      <input v-model="password" type="password" placeholder="密码">
      <button type="submit">登录</button>
    </form>
  </div>
</template>

<script>
export default {
  data() {
    return {
      username: '',
      password: ''
    }
  },
  methods: {
    login() {
      // 模拟API调用
      if (this.username && this.password) {
        localStorage.setItem('token', '模拟token')
        this.$router.push('/dashboard')
      }
    }
  }
}
</script>

处理登出功能

实现登出逻辑,清除认证状态并重定向到登录页面。

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

与状态管理集成

对于更复杂的应用,可以将认证状态集成到 Vuex 中。

vue router实现登录

// store/index.js
export default new Vuex.Store({
  state: {
    token: localStorage.getItem('token') || null
  },
  mutations: {
    setToken(state, token) {
      state.token = token
      localStorage.setItem('token', token)
    },
    clearToken(state) {
      state.token = null
      localStorage.removeItem('token')
    }
  },
  getters: {
    isAuthenticated: state => !!state.token
  }
})

更新路由守卫使用 Vuex 状态:

router.beforeEach((to, from, next) => {
  if (to.matched.some(record => record.meta.requiresAuth) && !store.getters.isAuthenticated) {
    next('/login')
  } else {
    next()
  }
})

动态路由

对于基于角色的权限控制,可以实现动态路由添加。

// 登录成功后动态添加路由
store.dispatch('login', credentials).then(() => {
  const adminRoutes = [
    { path: '/admin', component: AdminPanel }
  ]
  router.addRoutes(adminRoutes)
  next('/dashboard')
})

这些步骤提供了在 Vue.js 应用中实现登录功能的基础框架,可以根据具体需求进行调整和扩展。

标签: vuerouter
分享给朋友:

相关文章

vue实现计算

vue实现计算

Vue 实现计算的方法 在 Vue 中实现计算功能可以通过多种方式完成,主要包括计算属性(computed)、方法(methods)和侦听器(watch)。以下是具体的实现方法: 计算属性(Comp…

vue实现抽奖

vue实现抽奖

Vue 实现抽奖功能 基本抽奖逻辑 创建一个Vue组件,包含奖品列表、抽奖按钮和结果显示区域。使用随机数生成器选择奖品。 <template> <div> <…

vue实现分栏

vue实现分栏

Vue实现分栏的常见方法 使用CSS Flexbox布局 通过Flexbox可以快速实现分栏效果,适合大多数响应式布局场景 <template> <div class="con…

mvvm实现vue

mvvm实现vue

MVVM 模式在 Vue 中的实现 MVVM(Model-View-ViewModel)是一种前端架构模式,Vue 的设计灵感来源于此。以下是 MVVM 在 Vue 中的核心实现方式: 数据绑定(M…

vue实现绘图

vue实现绘图

Vue 实现绘图的方法 在 Vue 中实现绘图功能,可以通过多种方式实现,包括使用原生 HTML5 Canvas、第三方库(如 Fabric.js、Konva.js)或 SVG。以下是几种常见的实现方…

vue 实现table

vue 实现table

Vue 实现 Table 的方法 使用原生 HTML 表格 通过 Vue 的 v-for 指令动态渲染表格数据,适合简单表格场景。 <template> <table>…