当前位置:首页 > VUE

vue登录注册实现说

2026-02-23 04:51:37VUE

Vue 登录注册实现

前端实现

使用 Vue CLI 创建一个新项目,安装必要的依赖如 Vue Router 和 Axios。

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

创建登录和注册组件,在 src/components 目录下创建 Login.vueRegister.vue

<!-- 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(error)
      }
    }
  }
}
</script>
<!-- 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 {
        const response = await axios.post('/api/register', {
          name: this.name,
          email: this.email,
          password: this.password
        })
        localStorage.setItem('token', response.data.token)
        this.$router.push('/dashboard')
      } catch (error) {
        console.error(error)
      }
    }
  }
}
</script>

配置路由,在 src/router/index.js 中设置路由。

vue登录注册实现说

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

Vue.use(Router)

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

后端实现

使用 Node.js 和 Express 创建一个简单的后端服务,处理登录和注册请求。

mkdir server
cd server
npm init -y
npm install express body-parser jsonwebtoken bcryptjs cors

创建 server.js 文件。

vue登录注册实现说

const express = require('express')
const bodyParser = require('body-parser')
const jwt = require('jsonwebtoken')
const bcrypt = require('bcryptjs')
const cors = require('cors')

const app = express()
app.use(bodyParser.json())
app.use(cors())

const users = []

app.post('/api/register', async (req, res) => {
  const { name, email, password } = req.body
  const hashedPassword = await bcrypt.hash(password, 10)
  users.push({ name, email, password: hashedPassword })
  const token = jwt.sign({ email }, 'secret_key', { expiresIn: '1h' })
  res.json({ token })
})

app.post('/api/login', async (req, res) => {
  const { email, password } = req.body
  const user = users.find(user => user.email === email)
  if (!user) return res.status(400).json({ message: 'User not found' })
  const validPassword = await bcrypt.compare(password, user.password)
  if (!validPassword) return res.status(400).json({ message: 'Invalid password' })
  const token = jwt.sign({ email }, 'secret_key', { expiresIn: '1h' })
  res.json({ token })
})

app.listen(3001, () => {
  console.log('Server running on port 3001')
})

前后端联调

在 Vue 项目的 src/main.js 中配置 Axios 默认 baseURL。

import Vue from 'vue'
import App from './App.vue'
import router from './router'
import axios from 'axios'

axios.defaults.baseURL = 'http://localhost:3001'

Vue.config.productionTip = false

new Vue({
  router,
  render: h => h(App)
}).$mount('#app')

启动前端和后端服务,分别在不同的终端运行。

# 前端
npm run serve

# 后端
node server.js

访问 http://localhost:8080/loginhttp://localhost:8080/register 测试功能。

标签: vue
分享给朋友:

相关文章

vue实现grid

vue实现grid

Vue 实现 Grid 布局的方法 使用 CSS Grid 布局 Vue 可以结合 CSS Grid 布局实现灵活的网格系统。CSS Grid 是现代浏览器原生支持的布局方案,无需额外依赖库。 &l…

vue实现机制

vue实现机制

Vue 实现机制的核心原理 Vue.js 的核心实现机制主要基于响应式系统、虚拟 DOM 和组件化设计。以下是关键实现细节: 响应式系统 Vue 通过 Object.defineProperty(V…

vue 实现表单

vue 实现表单

Vue 表单实现方法 Vue.js 提供了多种方式实现表单,包括双向数据绑定、表单验证和动态表单生成。以下是常见的实现方法: 基础表单绑定 使用 v-model 指令实现表单元素与数据的双向绑定:…

利用vue 实现

利用vue 实现

以下是利用 Vue 实现常见功能的几种方法,分为不同场景和技术要点: 数据绑定与响应式更新 Vue 的核心特性是数据绑定,通过 v-model 实现双向绑定: <template>…

vue实现拖动

vue实现拖动

Vue实现拖动的常用方法 在Vue中实现拖动功能通常需要结合HTML5的拖放API或第三方库。以下是几种常见实现方式: 使用HTML5原生拖放API HTML5提供了原生拖放API,可以通过drag…

vue实现 单选

vue实现 单选

实现 Vue 单选功能 在 Vue 中实现单选功能可以通过多种方式完成,以下是几种常见的方法: 使用 v-model 绑定单选按钮 通过 v-model 可以轻松实现单选功能,将单选按钮的值绑定到同…