当前位置:首页 > VUE

vue mysql实现登录注册

2026-02-21 06:05:17VUE

使用Vue和MySQL实现登录注册功能

前端部分(Vue.js)

创建Vue项目并安装axios用于HTTP请求

npm install axios

在Vue组件中实现注册表单

<template>
  <div>
    <input v-model="username" placeholder="用户名">
    <input v-model="password" type="password" placeholder="密码">
    <button @click="register">注册</button>
  </div>
</template>

<script>
import axios from 'axios';

export default {
  data() {
    return {
      username: '',
      password: ''
    }
  },
  methods: {
    register() {
      axios.post('http://localhost:3000/register', {
        username: this.username,
        password: this.password
      }).then(response => {
        console.log(response.data);
      });
    }
  }
}
</script>

实现登录表单类似结构,只需修改方法和API端点

methods: {
  login() {
    axios.post('http://localhost:3000/login', {
      username: this.username,
      password: this.password
    }).then(response => {
      localStorage.setItem('token', response.data.token);
    });
  }
}

后端部分(Node.js + MySQL)

安装必要依赖

npm install express mysql2 body-parser bcryptjs jsonwebtoken cors

创建Express服务器并连接MySQL

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

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

const db = mysql.createConnection({
  host: 'localhost',
  user: 'root',
  password: 'yourpassword',
  database: 'auth_demo'
});

db.connect(err => {
  if (err) throw err;
  console.log('MySQL connected');
});

实现注册API

vue mysql实现登录注册

app.post('/register', (req, res) => {
  const { username, password } = req.body;
  const hashedPassword = bcrypt.hashSync(password, 8);

  db.query(
    'INSERT INTO users (username, password) VALUES (?, ?)',
    [username, hashedPassword],
    (err, result) => {
      if (err) return res.status(500).send('注册失败');
      res.status(200).send('注册成功');
    }
  );
});

实现登录API

app.post('/login', (req, res) => {
  const { username, password } = req.body;

  db.query(
    'SELECT * FROM users WHERE username = ?',
    [username],
    (err, results) => {
      if (err) return res.status(500).send('服务器错误');
      if (results.length === 0) return res.status(404).send('用户不存在');

      const passwordIsValid = bcrypt.compareSync(password, results[0].password);
      if (!passwordIsValid) return res.status(401).send('密码错误');

      const token = jwt.sign({ id: results[0].id }, 'secretkey', {
        expiresIn: 86400 // 24小时
      });

      res.status(200).send({ auth: true, token });
    }
  );
});

MySQL数据库准备

创建数据库和用户表

CREATE DATABASE auth_demo;

USE auth_demo;

CREATE TABLE users (
  id INT AUTO_INCREMENT PRIMARY KEY,
  username VARCHAR(255) NOT NULL UNIQUE,
  password VARCHAR(255) NOT NULL
);

运行项目

vue mysql实现登录注册

启动前端Vue项目

npm run serve

启动后端Node服务器

node server.js

安全注意事项

密码必须使用bcrypt等库进行哈希处理 敏感路由应添加JWT验证中间件 生产环境应使用HTTPS 考虑实现CSRF保护

扩展功能

添加密码重置功能 实现电子邮件验证 添加用户角色和权限管理 实现记住我功能

标签: vuemysql
分享给朋友:

相关文章

vue   实现单选

vue 实现单选

Vue 实现单选功能 在 Vue 中实现单选功能可以通过多种方式,以下是几种常见的方法: 使用原生 <input type="radio"> 绑定 v-model 通过 v-model…

vue实现 toast

vue实现 toast

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

vue mvvm 实现

vue mvvm 实现

Vue MVVM 实现原理 Vue.js 的 MVVM(Model-View-ViewModel)架构通过数据绑定和响应式系统实现视图与数据的自动同步。以下是其核心实现机制: 数据劫持与响应式系统…

vue 实现 confirm

vue 实现 confirm

实现确认对话框的方法 在Vue中实现确认对话框可以通过多种方式完成,包括使用内置组件、第三方库或自定义组件。 使用浏览器原生confirm 最简单的实现方式是直接调用浏览器原生的confirm方法。…

vue ui实现创建vue项目

vue ui实现创建vue项目

使用 Vue UI 创建 Vue 项目 Vue UI 是 Vue CLI 提供的图形化界面工具,可以通过可视化操作创建和管理 Vue 项目。 安装 Vue CLI 确保已安装 Node.js(建议版…

vue实现登录权限

vue实现登录权限

Vue 实现登录权限方案 路由守卫控制访问权限 安装vue-router并配置路由守卫,在全局前置守卫中检查用户登录状态和权限。未登录用户访问受限路由时重定向到登录页。 // router.js r…