当前位置:首页 > VUE

vue实现登录注册mysql

2026-01-23 03:12:33VUE

Vue 前端实现登录注册

创建 Vue 项目并安装必要依赖:

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

配置路由(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 }
  ]
})

登录组件示例(Login.vue):

<template>
  <div>
    <input v-model="email" placeholder="Email">
    <input v-model="password" type="password" placeholder="Password">
    <button @click="login">Login</button>
  </div>
</template>

<script>
export default {
  data() {
    return {
      email: '',
      password: ''
    }
  },
  methods: {
    async login() {
      try {
        const response = await axios.post('http://localhost:3000/login', {
          email: this.email,
          password: this.password
        })
        localStorage.setItem('token', response.data.token)
        this.$router.push('/dashboard')
      } catch (error) {
        console.error(error)
      }
    }
  }
}
</script>

Node.js 后端实现

创建 Express 服务端:

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

数据库连接配置(db.js):

const mysql = require('mysql2')

const pool = mysql.createPool({
  host: 'localhost',
  user: 'root',
  password: 'yourpassword',
  database: 'auth_demo',
  waitForConnections: true,
  connectionLimit: 10,
  queueLimit: 0
})

module.exports = pool.promise()

用户模型(models/user.js):

const db = require('../db')
const bcrypt = require('bcryptjs')
const jwt = require('jsonwebtoken')

class User {
  static async create({ email, password }) {
    const hashedPassword = await bcrypt.hash(password, 10)
    const [result] = await db.execute(
      'INSERT INTO users (email, password) VALUES (?, ?)',
      [email, hashedPassword]
    )
    return result.insertId
  }

  static async findByEmail(email) {
    const [rows] = await db.execute(
      'SELECT * FROM users WHERE email = ?',
      [email]
    )
    return rows[0]
  }
}

module.exports = User

MySQL 数据库设置

创建数据库和用户表:

CREATE DATABASE auth_demo;

USE auth_demo;

CREATE TABLE users (
  id INT AUTO_INCREMENT PRIMARY KEY,
  email VARCHAR(255) NOT NULL UNIQUE,
  password VARCHAR(255) NOT NULL,
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

前后端联调

启动前端开发服务器:

npm run serve

启动后端服务器(server/index.js):

const express = require('express')
const bodyParser = require('body-parser')
const cors = require('cors')
const User = require('./models/user')

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

app.post('/register', async (req, res) => {
  try {
    await User.create(req.body)
    res.status(201).json({ message: 'User created' })
  } catch (error) {
    res.status(400).json({ error: error.message })
  }
})

app.post('/login', async (req, res) => {
  const user = await User.findByEmail(req.body.email)
  if (!user) return res.status(404).json({ error: 'User not found' })

  const isValid = await bcrypt.compare(req.body.password, user.password)
  if (!isValid) return res.status(401).json({ error: 'Invalid password' })

  const token = jwt.sign({ id: user.id }, 'your-secret-key', { expiresIn: '1h' })
  res.json({ token })
})

app.listen(3000, () => console.log('Server running on port 3000'))

安全增强措施

实现密码加密存储:

const saltRounds = 10
const hashedPassword = await bcrypt.hash(password, saltRounds)

添加 JWT 验证中间件:

function authenticateToken(req, res, next) {
  const authHeader = req.headers['authorization']
  const token = authHeader && authHeader.split(' ')[1]

  if (!token) return res.sendStatus(401)

  jwt.verify(token, 'your-secret-key', (err, user) => {
    if (err) return res.sendStatus(403)
    req.user = user
    next()
  })
}

部署注意事项

配置生产环境变量:

# .env
DB_HOST=localhost
DB_USER=root
DB_PASSWORD=securepassword
DB_NAME=auth_demo
JWT_SECRET=complexsecretkey

前端打包部署:

npm run build

后端进程管理(使用 PM2):

npm install pm2 -g
pm2 start index.js

vue实现登录注册mysql

标签: vuemysql
分享给朋友:

相关文章

vue实现图片搜索

vue实现图片搜索

Vue实现图片搜索功能 使用HTML5的File API获取图片 通过<input type="file">元素让用户选择图片文件,使用FileReader对象读取图片数据。 <t…

vue实现表格多行修改

vue实现表格多行修改

实现多行编辑表格 在Vue中实现表格的多行编辑功能,可以通过以下方法完成。这里以Element UI的表格组件为例,但思路适用于其他UI库或原生实现。 数据准备 定义表格数据和编辑状态管理变量:…

实现vue

实现vue

安装Vue.js 通过npm安装Vue.js是最常见的方式。确保已安装Node.js和npm,运行以下命令: npm install vue 或者使用CDN直接引入: <script s…

vue实现 toast

vue实现 toast

Vue 实现 Toast 组件 在 Vue 中实现 Toast 组件可以通过多种方式完成,以下是几种常见的方法: 使用全局组件和事件总线 创建一个全局的 Toast 组件,并通过事件总线或 Vue…

vue实现订单

vue实现订单

Vue 实现订单功能 订单数据结构设计 订单数据通常包含以下字段: order: { id: String, // 订单ID userId: String,…

vue实现popup

vue实现popup

Vue 实现 Popup 弹窗 使用 Vue 原生组件 创建一个基本的 Vue 组件作为弹窗,通过 v-if 或 v-show 控制显示隐藏。 <template> <div&…