当前位置:首页 > VUE

vue 实现登陆

2026-03-10 09:16:46VUE

Vue 登录功能实现

基础结构搭建

使用 Vue CLI 创建项目或直接在现有项目中添加登录功能。安装必要依赖如 vue-router 和 axios:

npm install vue-router axios

创建登录组件 Login.vue:

<template>
  <div class="login-container">
    <form @submit.prevent="handleLogin">
      <input v-model="username" placeholder="用户名"/>
      <input v-model="password" type="password" placeholder="密码"/>
      <button type="submit">登录</button>
    </form>
  </div>
</template>

状态管理

通过 Vuex 或组件内状态管理用户凭证:

export default {
  data() {
    return {
      username: '',
      password: ''
    }
  },
  methods: {
    async handleLogin() {
      try {
        const response = await axios.post('/api/login', {
          username: this.username,
          password: this.password
        })
        localStorage.setItem('token', response.data.token)
        this.$router.push('/dashboard')
      } catch (error) {
        alert('登录失败')
      }
    }
  }
}

路由配置

在 router/index.js 中配置登录路由和权限控制:

vue 实现登陆

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

添加导航守卫实现路由保护:

router.beforeEach((to, from, next) => {
  if (to.matched.some(record => record.meta.requiresAuth)) {
    if (!localStorage.getItem('token')) {
      next('/login')
    } else {
      next()
    }
  } else {
    next()
  }
})

表单验证

使用 Vuelidate 或自定义验证增强表单安全性:

vue 实现登陆

import { required, minLength } from 'vuelidate/lib/validators'

export default {
  validations: {
    username: { required },
    password: { required, minLength: minLength(6) }
  },
  methods: {
    handleLogin() {
      this.$v.$touch()
      if (!this.$v.$invalid) {
        // 提交逻辑
      }
    }
  }
}

安全增强

实现以下安全措施:

  • 使用 HTTPS 传输数据
  • 密码字段进行前端加密
  • 设置 token 过期时间
  • 添加 CSRF 防护

响应处理

完善登录后的响应处理逻辑:

handleLogin() {
  axios.post('/api/login', credentials)
    .then(response => {
      if (response.data.success) {
        commit('SET_USER', response.data.user)
        commit('SET_TOKEN', response.data.token)
        router.replace({ name: 'Home' })
      }
    })
    .catch(error => {
      if (error.response.status === 401) {
        this.error = '无效凭证'
      }
    })
}

用户体验优化

添加加载状态和错误提示:

<template>
  <button :disabled="loading" type="submit">
    {{ loading ? '登录中...' : '登录' }}
  </button>
  <div v-if="error" class="error-message">{{ error }}</div>
</template>

以上实现方案可根据具体项目需求进行调整和扩展。

标签: vue
分享给朋友:

相关文章

vue设计与实现目录

vue设计与实现目录

以下是《Vue设计与实现》一书的典型目录结构(根据常见技术书籍及Vue核心内容整理): 响应式系统 响应式数据的基本原理 依赖收集与触发更新 实现简易响应式系统 Proxy与Reflec…

vue datepicker 实现

vue datepicker 实现

实现 Vue Datepicker 的基本方法 在 Vue 项目中实现日期选择功能,可以使用第三方库如 vue-datepicker 或 v-calendar。以下是两种常见实现方式: 安装 vue…

vue实现剪辑

vue实现剪辑

Vue 实现视频剪辑功能 在Vue中实现视频剪辑功能通常需要结合HTML5的<video>元素和第三方库(如FFmpeg.js或Video.js)。以下是几种常见的实现方法: 使用FFm…

vue computed实现

vue computed实现

计算属性的基本用法 在Vue中,计算属性通过computed选项定义,用于声明依赖于其他属性的动态值。计算属性基于它们的依赖进行缓存,只有依赖发生变化时才会重新计算。 new Vue({ dat…

vue实现接口

vue实现接口

在 Vue 中实现接口请求 Vue 本身不直接提供 HTTP 请求功能,通常需要借助第三方库如 axios 或 fetch 来实现接口请求。以下是几种常见方法: 使用 axios 发送请求 安装 a…

vue实现抽奖

vue实现抽奖

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