当前位置:首页 > VUE

vue 实现登陆注册

2026-02-22 20:19:53VUE

Vue 实现登录注册功能

使用 Vue 实现登录注册功能通常需要结合前端框架(如 Vue 2/3)和后端 API。以下是实现的基本步骤和代码示例。

创建 Vue 项目

使用 Vue CLI 创建一个新项目:

vue create login-register-demo
cd login-register-demo
npm install axios vue-router vuex --save

配置路由

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

import Vue from 'vue'
import Router from 'vue-router'
import Login from '../views/Login.vue'
import Register from '../views/Register.vue'

Vue.use(Router)

export default new Router({
  routes: [
    { path: '/login', component: Login },
    { path: '/register', component: Register }
  ]
})

创建登录组件

src/views/Login.vue 中实现登录表单:

<template>
  <div>
    <h2>Login</h2>
    <form @submit.prevent="handleLogin">
      <input v-model="email" type="email" placeholder="Email" required>
      <input v-model="password" type="password" placeholder="Password" required>
      <button type="submit">Login</button>
    </form>
  </div>
</template>

<script>
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) {
        console.error('Login failed:', error)
      }
    }
  }
}
</script>

创建注册组件

src/views/Register.vue 中实现注册表单:

<template>
  <div>
    <h2>Register</h2>
    <form @submit.prevent="handleRegister">
      <input v-model="name" type="text" placeholder="Name" required>
      <input v-model="email" type="email" placeholder="Email" required>
      <input v-model="password" type="password" placeholder="Password" required>
      <button type="submit">Register</button>
    </form>
  </div>
</template>

<script>
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
        })
        this.$router.push('/login')
      } catch (error) {
        console.error('Registration failed:', error)
      }
    }
  }
}
</script>

配置 API 请求

src/main.js 中配置 axios 全局实例:

import axios from 'axios'
axios.defaults.baseURL = 'http://your-api-url.com'
Vue.prototype.$http = axios

状态管理(可选)

如果需要全局状态管理,可以使用 Vuex。在 src/store/index.js 中:

import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)

export default new Vuex.Store({
  state: {
    user: null,
    token: localStorage.getItem('token') || null
  },
  mutations: {
    setUser(state, user) {
      state.user = user
    },
    setToken(state, token) {
      state.token = token
      localStorage.setItem('token', token)
    },
    logout(state) {
      state.user = null
      state.token = null
      localStorage.removeItem('token')
    }
  }
})

路由守卫

src/router/index.js 中添加路由守卫保护需要认证的路由:

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

后端 API 集成

确保后端 API 有以下端点:

  • POST /api/login - 处理登录请求
  • POST /api/register - 处理注册请求

示例 Node.js Express 端点:

app.post('/api/login', (req, res) => {
  // 验证用户凭据
  // 如果验证成功,返回 token
  res.json({ token: 'generated-jwt-token' })
})

app.post('/api/register', (req, res) => {
  // 创建新用户
  // 返回成功消息
  res.json({ message: 'User registered successfully' })
})

表单验证

可以使用 Vuelidate 进行表单验证:

npm install vuelidate --save

在组件中使用:

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

export default {
  data() {
    return {
      email: '',
      password: ''
    }
  },
  validations: {
    email: { required, email },
    password: { required }
  }
}

样式优化

可以使用 CSS 框架如 Bootstrap 或 Tailwind CSS 来美化表单:

npm install bootstrap

main.js 中导入:

import 'bootstrap/dist/css/bootstrap.css'

错误处理

增强错误处理显示用户友好的消息:

methods: {
  async handleLogin() {
    try {
      const response = await this.$http.post('/api/login', {
        email: this.email,
        password: this.password
      })
      this.$store.commit('setToken', response.data.token)
      this.$router.push('/dashboard')
    } catch (error) {
      this.error = error.response?.data?.message || 'Login failed'
    }
  }
}

响应式设计

确保表单在不同设备上表现良好:

vue 实现登陆注册

@media (max-width: 768px) {
  form {
    width: 90%;
    margin: 0 auto;
  }
}

标签: vue
分享给朋友:

相关文章

vue实现store

vue实现store

Vue 实现 Store 在 Vue 中,可以通过 Vuex 或 Pinia 实现全局状态管理(Store)。以下是两种主流方案的实现方法。 使用 Vuex 实现 Store Vuex 是 Vue…

vue实现引导

vue实现引导

Vue 实现引导功能的方法 使用第三方库 推荐使用 driver.js 或 intro.js 这类专门为 Vue 设计的引导库。这些库提供了完整的 API 和样式,能够快速实现引导功能。 安装 dr…

vue实现画图

vue实现画图

Vue 实现画图功能 在 Vue 中实现画图功能通常需要结合 HTML5 的 <canvas> 元素或第三方库。以下是几种常见的方法: 使用原生 Canvas API 通过 Vue 直接…

vue实现flvvideo

vue实现flvvideo

vue-flv-player 实现 FLV 视频播放 安装依赖包 npm install flv.js vue-flv-player 基础组件引入 <template> <v…

vue实现系统

vue实现系统

Vue 实现系统的核心方法 使用 Vue.js 构建系统时,需结合其响应式特性与组件化开发模式。以下为关键实现路径: 项目初始化与工程配置 通过 Vue CLI 或 Vite 创建项目骨架,推荐选择…

vue实现权限

vue实现权限

Vue 实现权限管理的方法 在 Vue 项目中实现权限管理通常涉及路由控制、按钮权限和接口权限。以下是几种常见的实现方式: 路由权限控制 通过动态路由的方式,根据用户权限加载不同的路由配置。可以使用…