当前位置:首页 > VUE

vue++实现登录注册

2026-02-25 07:26:48VUE

Vue 实现登录注册功能

项目初始化与依赖安装

使用 Vue CLI 创建一个新项目,安装必要依赖如 vue-routeraxios

vue create auth-demo
cd auth-demo
npm install vue-router axios

路由配置

src/router/index.js 中配置登录和注册页面的路由:

import { createRouter, createWebHistory } from 'vue-router'
import Login from '../views/Login.vue'
import Register from '../views/Register.vue'

const routes = [
  { path: '/login', component: Login },
  { path: '/register', component: Register }
]

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

export default router

登录组件实现

创建 src/views/Login.vue 文件:

<template>
  <div>
    <h2>登录</h2>
    <form @submit.prevent="handleLogin">
      <input v-model="email" type="email" placeholder="邮箱" required>
      <input v-model="password" type="password" placeholder="密码" required>
      <button type="submit">登录</button>
    </form>
  </div>
</template>

<script>
import axios from 'axios'

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

注册组件实现

创建 src/views/Register.vue 文件:

<template>
  <div>
    <h2>注册</h2>
    <form @submit.prevent="handleRegister">
      <input v-model="name" type="text" placeholder="姓名" required>
      <input v-model="email" type="email" placeholder="邮箱" required>
      <input v-model="password" type="password" placeholder="密码" required>
      <button type="submit">注册</button>
    </form>
  </div>
</template>

<script>
import axios from 'axios'

export default {
  data() {
    return {
      name: '',
      email: '',
      password: ''
    }
  },
  methods: {
    async handleRegister() {
      try {
        await axios.post('/api/register', {
          name: this.name,
          email: this.email,
          password: this.password
        })
        alert('注册成功')
        this.$router.push('/login')
      } catch (error) {
        alert('注册失败')
      }
    }
  }
}
</script>

状态管理(可选)

对于更复杂的应用,可以使用 Pinia 管理用户状态:

vue++实现登录注册

npm install pinia

创建 src/stores/auth.js

import { defineStore } from 'pinia'

export const useAuthStore = defineStore('auth', {
  state: () => ({
    user: null,
    token: localStorage.getItem('token') || null
  }),
  actions: {
    async login(credentials) {
      const response = await axios.post('/api/login', credentials)
      this.token = response.data.token
      localStorage.setItem('token', this.token)
    },
    async register(userData) {
      await axios.post('/api/register', userData)
    }
  }
})

表单验证增强

使用 VeeValidate 进行表单验证:

npm install vee-validate @vee-validate/rules

示例验证规则:

vue++实现登录注册

import { defineRule, configure } from 'vee-validate'
import { required, email, min } from '@vee-validate/rules'

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

API 服务封装

创建 src/services/auth.js 封装 API 调用:

import axios from 'axios'

const API_URL = 'http://your-api-url.com'

export default {
  login(credentials) {
    return axios.post(`${API_URL}/login`, credentials)
  },
  register(userData) {
    return axios.post(`${API_URL}/register`, userData)
  }
}

导航守卫

在路由中添加导航守卫检查认证状态:

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

样式优化

使用 CSS 或 UI 框架如 Element Plus 美化表单:

npm install element-plus

main.js 中引入:

import ElementPlus from 'element-plus'
import 'element-plus/dist/index.css'

createApp(App).use(ElementPlus).mount('#app')

标签: vue
分享给朋友:

相关文章

vue实现级联

vue实现级联

Vue 实现级联选择器的方法 级联选择器(Cascader)是常见的表单组件,用于处理多层级联动数据选择(如省市区选择)。以下是几种实现方式: 基于 Element UI 的 el-cascader…

vue实现handsontable

vue实现handsontable

Vue 中实现 Handsontable 要在 Vue 项目中集成 Handsontable,可以使用官方提供的 @handsontable/vue 封装库。以下是一个完整的实现步骤。 安装依赖 确…

vue实现烟花

vue实现烟花

Vue 实现烟花效果 在 Vue 中实现烟花效果可以通过结合 CSS 动画和 JavaScript 动态生成烟花元素。以下是具体实现方法: 动态生成烟花元素 通过 Vue 的 v-for 动…

vue 实现筛选功能

vue 实现筛选功能

实现筛选功能的基本思路 在Vue中实现筛选功能通常涉及以下几个核心步骤:数据绑定、筛选逻辑处理、结果展示。以下是具体实现方法。 数据准备 准备需要筛选的数据源,通常是一个数组,可以存储在Vue组件的…

vue前后端实现

vue前后端实现

Vue 前后端实现方案 Vue 作为前端框架,通常需要与后端服务结合使用。以下是常见的实现方式: 前端实现(Vue) 使用 Vue CLI 或 Vite 创建项目: npm init vue@la…

vue怎么实现拦截

vue怎么实现拦截

Vue 实现拦截的方法 在 Vue 中实现拦截可以通过多种方式,包括路由拦截、HTTP 请求拦截和全局钩子拦截。以下是几种常见的拦截实现方法。 路由拦截 使用 Vue Router 的导航守卫可以在…