Express + MongoDB 实现登录验证码

使用 svg-captcha 生成 SVG 格式验证码,express-session 存储验证码

一、安装依赖

bash 复制代码
npm install svg-captcha express-session

二、核心代码示例

javascript 复制代码
const svgCaptcha = require("svg-captcha");
const session = require("express-session");

// 配置会话中间件
app.use(
  session({
    secret: "your-secret-key",
    resave: false,
    saveUninitialized: true,
  })
);

// 生成验证码
app.get("/captcha", (req, res) => {
  const captcha = svgCaptcha.create();
  req.session = req.session || {};
  req.session.captcha = captcha.text;
  res.type("svg");
  res.status(200).send(captcha.data);
});

// 用户登录
app.post("/login", async (req, res) => {
  const { username, password, captcha } = req.body;
  if (req.session.captcha !== captcha) {
    return res.status(400).json({ error: "验证码错误" });
  }
  try {
    const user = await User.findOne({ username, password });
    if (user) {
      res.status(200).json({ message: "登录成功" });
    } else {
      res.status(401).json({ error: "用户名或密码错误" });
    }
  } catch (error) {
    res.status(500).json({ error: "登录失败", details: error.message });
  }
});
相关推荐
standxy9 小时前
即时库存同步实战:从旺店通拉取库存详情落库 MySQL 的完整策略
数据库·集成·电商
麦壳饼9 小时前
SonnetDB:工业 IoT 中的 PID 历史分析与 PLC 协作
数据库·sonnetdb
吹什么轩9 小时前
MySQL 事务管理:从 ACID 到 MVCC,一篇讲透
数据库·mysql
时间售卖铺10 小时前
Oracle DQL精髓:从基础到高级实战
运维·数据库·云原生·oracle
m0_6399069410 小时前
MySQL 锁机制详解|表锁、行锁、意向锁,死锁成因与解决方案
数据库·mysql
进击的荆棘10 小时前
MySQL——在ubuntu环境下安装MySQL
数据库·mysql·ubuntu
hey you~10 小时前
云呼叫中心坐席自动分配实战:ACD 策略、Redis+Lua 实现与排查清单
数据库·redis·lua·云呼叫中心·acd·坐席分配·坐席状态机
夜雪一千11 小时前
MySQL 数据字典如何获得
数据库·mysql
系统集成-鹰翔11 小时前
ERP推单数据库怎么备份:SQLite WAL模式下只复制db文件为什么可能漏任务
javascript·数据库·经验分享·后端
QianhangQianping11 小时前
撤销重做不是「存快照」:一个可视化编辑器的Operation 设计
java·前端·数据库·typescript·编辑器·前端架构·撤销重做