当前位置:首页 > 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

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项目

npm run serve

启动后端Node服务器

node server.js

安全注意事项

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

扩展功能

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

vue mysql实现登录注册

标签: vuemysql
分享给朋友:

相关文章

vue实现摘要

vue实现摘要

Vue 实现摘要的方法 在 Vue 中实现文本摘要功能通常涉及截取文本的前部分内容并添加省略号。可以通过计算属性、过滤器或自定义指令来实现。 计算属性实现 在 Vue 组件中定义一个计算属性,用于…

vue实现全屏

vue实现全屏

Vue 实现全屏功能的方法 在 Vue 中实现全屏功能可以通过浏览器提供的 Fullscreen API 来实现。以下是几种常见的实现方式: 使用原生 Fullscreen API 通过调用 doc…

vue首页实现

vue首页实现

实现Vue首页的基本步骤 创建一个Vue首页通常涉及项目初始化、页面结构设计、路由配置和组件开发。以下是具体实现方法: 初始化Vue项目 使用Vue CLI或Vite快速搭建项目结构: npm i…

vue 分页 实现

vue 分页 实现

Vue 分页实现方法 使用第三方库(如 Element UI) Element UI 提供了现成的分页组件 el-pagination,适合快速集成。 安装 Element UI: npm i…

vue app 实现

vue app 实现

Vue App 实现步骤 创建Vue项目 使用Vue CLI或Vite初始化项目。Vue CLI适合传统项目,Vite适合现代轻量级应用。 npm create vue@latest my-v…

vue实现字幕

vue实现字幕

Vue 实现字幕功能 在 Vue 中实现字幕功能可以通过动态绑定数据和 CSS 动画来实现。以下是具体实现方法: 1. 基础字幕组件 创建一个字幕组件,通过 v-model 或 props 接…