当前位置:首页 > 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组件替换原生表单元素,并添加验证规则。

用vue实现登陆

<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服务处理登录请求,并处理响应。

用vue实现登陆

<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处理登录,替代直接调用服务。

<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中实现文章锚点定位可以通过多种方式完成,以下是几种常见的方法: 使用原生HTML锚点 通过HTML的id属性和<a>标签的href属性实现锚点跳转。在Vu…

vue实现打印二维码

vue实现打印二维码

安装二维码生成库 使用 qrcode 或 vue-qrcode 库生成二维码。通过 npm 安装: npm install qrcode vue-qrcode 生成二维码 在 Vue 组件中引入…

vue实现div

vue实现div

Vue 实现 DIV 元素的方法 在 Vue 中实现 DIV 元素可以通过多种方式,以下是几种常见的实现方法: 使用模板语法 在 Vue 的模板中直接使用 HTML 的 <div> 标签…

vue实现erp

vue实现erp

Vue实现ERP系统的关键步骤 技术选型与架构设计 采用Vue 3 + TypeScript构建前端,搭配Pinia状态管理,Element Plus或Ant Design Vue作为UI框架。后端可…

vue实现反馈

vue实现反馈

Vue 实现反馈功能的方法 在 Vue 中实现反馈功能可以通过多种方式,包括弹窗提示、Toast 消息、表单提交等。以下是几种常见的实现方法。 弹窗反馈 使用 Vue 的组件化特性创建一个弹窗组件,…

vue实现监控

vue实现监控

Vue 实现监控功能的方法 在 Vue 中实现监控功能通常涉及数据变化监听、事件监听或第三方监控工具集成。以下是几种常见实现方式: 使用 Vue 的 watch 监听数据变化 通过 watch 可以…