Node.js登录验证MySQL

在Web开发中,用户登录验证是一个非常常见的功能。而MySQL是一种广泛使用的关系型数据库,它可以用来存储用户的登录信息。本文将介绍如何使用Node.js来进行用户登录验证,并且将用户信息存储在MySQL数据库中。

准备工作

在开始之前,我们需要安装一些必要的软件和包。首先,确保你已经安装了Node.js和MySQL。如果还没有安装,可以从官方网站下载安装包进行安装。

另外,我们还需要安装一些Node.js的依赖包。打开命令行,进入项目目录,并执行以下命令:

npm init -y
npm install express mysql express-session bcrypt

上述命令将会初始化一个新的Node.js项目,并且安装了Express框架、MySQL驱动、会话管理模块和密码加密模块。

创建数据库

首先,我们需要在MySQL中创建一个用于存储用户登录信息的表。打开MySQL控制台,连接到你的数据库,并执行以下SQL语句:

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

上述SQL语句将会创建一个名为mydb的数据库,并在其中创建一个名为users的表,该表包含idusernamepassword三个字段。id字段将自动递增生成,usernamepassword字段用于存储用户的登录信息。

编写代码

接下来,我们将编写Node.js代码实现用户登录验证的功能。在项目根目录下创建一个名为app.js的文件,并在其中添加以下代码:

const express = require('express');
const mysql = require('mysql');
const session = require('express-session');
const bcrypt = require('bcrypt');

const app = express();

// 配置MySQL连接池
const pool = mysql.createPool({
  host: 'localhost',
  user: 'root',
  password: 'password',
  database: 'mydb',
  connectionLimit: 10
});

// 配置Express会话
app.use(session({
  secret: 'secret',
  resave: true,
  saveUninitialized: true
}));

// 配置路由
app.get('/', (req, res) => {
  res.send('Hello World!');
});

app.get('/login', (req, res) => {
  res.send(`
    <form action="/login" method="post">
      <input type="text" name="username" placeholder="Username">
      <input type="password" name="password" placeholder="Password">
      <button type="submit">Login</button>
    </form>
  `);
});

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

  // 查询数据库中是否存在该用户
  pool.query('SELECT * FROM users WHERE username = ?', [username], (error, results) => {
    if (error) {
      throw error;
    }

    // 检查密码是否匹配
    if (results.length > 0 && bcrypt.compareSync(password, results[0].password)) {
      req.session.loggedin = true;
      req.session.username = username;
      res.redirect('/profile');
    } else {
      res.send('Incorrect username or password');
    }
  });
});

app.get('/profile', (req, res) => {
  if (req.session.loggedin) {
    res.send(`Welcome back, ${req.session.username}!`);
  } else {
    res.redirect('/login');
  }
});

// 启动服务器
app.listen(3000, () => {
  console.log('Server started on port 3000');
});

上述代码使用了Express框架来搭建Web服务器,并使用了MySQL驱动来连接和操作MySQL数据库。在/login路由中,我们返回一个包含用户名和密码输入框的表单,用于用户输入登录信息。当用户提交表单后,我们将会查询数据库中是否存在该用户,并且检查密码是否匹配。如果验证通过,将会在会话中设置loggedinusername属性,并且重定向到/profile路由。在/profile路由中,我们会检查用户是否已经登录,如果已经登录,则返回欢迎页面,否则将会重定向到登录页面。

运行代码

在命令行中执行以下命令,启动服务器:

node app.js