当前位置:首页 > VUE

用vue实现登陆

2026-02-21 20:36:50VUE

实现登录功能的基本步骤

安装Vue及相关依赖 确保已安装Vue CLI,通过npm install -g @vue/cli安装最新版本。创建新项目使用vue create project-name命令。

创建登录组件 在src/components目录下新建Login.vue文件。该组件包含表单元素,用于输入用户名和密码,并绑定到Vue的data属性。

<template>
  <div>
    <form @submit.prevent="handleLogin">
      <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: {
    handleLogin() {
      // 登录逻辑
    }
  }
}
</script>

添加表单验证

安装VeeValidate 通过npm install vee-validate安装表单验证库。在main.js中引入并配置基本规则。

import { Form, Field, ErrorMessage, defineRule } from 'vee-validate'
import { required, email } from '@vee-validate/rules'

defineRule('required', required)
defineRule('email', email)

app.component('Form', Form)
app.component('Field', Field)
app.component('ErrorMessage', ErrorMessage)

更新登录组件 使用VeeValidate组件替换原生表单元素,并添加验证规则。

<template>
  <Form @submit="handleLogin">
    <Field name="email" type="email" :rules="validateEmail" />
    <ErrorMessage name="email" />

    <Field name="password" type="password" rules="required" />
    <ErrorMessage name="password" />

    <button type="submit">登录</button>
  </Form>
</template>

<script>
export default {
  methods: {
    validateEmail(value) {
      const regex = /^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}$/i
      return regex.test(value) || '请输入有效的邮箱地址'
    },
    handleLogin(values) {
      // 验证通过后的处理
    }
  }
}
</script>

处理登录请求

安装Axios 通过npm install axios安装HTTP客户端。创建api服务文件集中管理请求。

// src/services/auth.js
import axios from 'axios'

const api = axios.create({
  baseURL: 'https://your-api-endpoint.com/api'
})

export default {
  login(credentials) {
    return api.post('/login', credentials)
  }
}

更新登录方法 在组件中调用auth服务处理登录请求,并处理响应。

<script>
import authService from '../services/auth'

export default {
  methods: {
    async handleLogin(values) {
      try {
        const response = await authService.login(values)
        localStorage.setItem('token', response.data.token)
        this.$router.push('/dashboard')
      } catch (error) {
        alert('登录失败: ' + error.response.data.message)
      }
    }
  }
}
</script>

添加路由保护

配置Vue Router 安装路由npm install vue-router,创建路由配置文件。

// src/router/index.js
import { createRouter, createWebHistory } from 'vue-router'
import Login from '../components/Login.vue'
import Dashboard from '../components/Dashboard.vue'

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

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

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

export default router

状态管理

使用Vuex管理登录状态 安装Vuexnpm install vuex,创建store管理用户状态。

// src/store/index.js
import { createStore } from 'vuex'

export default createStore({
  state: {
    user: null,
    isAuthenticated: false
  },
  mutations: {
    SET_USER(state, user) {
      state.user = user
      state.isAuthenticated = true
    },
    LOGOUT(state) {
      state.user = null
      state.isAuthenticated = false
    }
  },
  actions: {
    login({ commit }, credentials) {
      return authService.login(credentials)
        .then(response => {
          commit('SET_USER', response.data.user)
          localStorage.setItem('token', response.data.token)
        })
    },
    logout({ commit }) {
      commit('LOGOUT')
      localStorage.removeItem('token')
    }
  }
})

更新登录组件 使用store的action处理登录,替代直接调用服务。

用vue实现登陆

<script>
import { mapActions } from 'vuex'

export default {
  methods: {
    ...mapActions(['login']),
    async handleLogin(values) {
      try {
        await this.login(values)
        this.$router.push('/dashboard')
      } catch (error) {
        alert('登录失败: ' + error.response.data.message)
      }
    }
  }
}
</script>

标签: vue
分享给朋友:

相关文章

vue实现添加用户

vue实现添加用户

Vue 实现添加用户功能 数据绑定与表单设计 在 Vue 中实现添加用户功能,首先需要设计一个表单,用于收集用户输入的数据。通过 v-model 实现双向数据绑定,确保表单数据与 Vue 实例中的数据…

vue的动画实现

vue的动画实现

Vue 动画实现方式 Vue 提供了多种方式实现动画效果,主要通过内置组件和第三方库支持。 使用 Vue 内置过渡组件 Vue 的 transition 和 transition-group 组件可…

vue实现键盘

vue实现键盘

Vue 实现键盘功能 在Vue中实现键盘功能通常涉及监听键盘事件、处理输入以及渲染虚拟键盘界面。以下是几种常见的实现方式: 监听键盘事件 通过@keydown或@keyup指令监听键盘事件,适用于需…

vue vnode实现

vue vnode实现

Vue VNode 实现原理 VNode(Virtual Node)是 Vue 的核心概念之一,用于描述真实 DOM 的轻量级虚拟表示。VNode 的实现涉及以下关键点: VNode 的基本结构 V…

vue实现标题

vue实现标题

Vue 实现标题的方法 在Vue中实现标题可以通过多种方式,以下是几种常见的方法: 方法一:使用模板语法 在Vue组件的模板中直接使用HTML的<h1>到<h6>标签来定义…

vue 实现脚本

vue 实现脚本

Vue 实现脚本的方法 Vue.js 提供了多种方式来实现脚本功能,包括组件内脚本、混入(Mixins)、插件(Plugins)以及自定义指令等。以下是常见的实现方式: 组件内脚本 在 Vue 单文…