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 });
  }
});
相关推荐
是桃萌萌鸭~几秒前
oracle的隐藏虚拟列详解
运维·数据库·oracle
2301_779622412 分钟前
SQL分组聚合优化_GROUP BY索引与优化方案
jvm·数据库·python
m0_740796367 分钟前
golang如何使用sync.WaitGroup_golang sync.WaitGroup并发等待使用方法
jvm·数据库·python
DianSan_ERP8 分钟前
抖店订单接口同步中如何解决订单漏单与数据一致性难题?
数据库
2401_8242226912 分钟前
c++如何通过重定向rdbuf来捕获第三方库的日志输出到文件【详解】
jvm·数据库·python
2401_8676239812 分钟前
CSS如何解决响应式文字大小调整_利用clamp函数实现流体排版
jvm·数据库·python
2501_9010064714 分钟前
如何使用SQL视图快速生成测试数据_模拟复杂场景
jvm·数据库·python
2401_8504916518 分钟前
安装宝塔面板提示端口被占用_查找并终止占用进程
jvm·数据库·python
2401_8330336220 分钟前
如何通过Java存储过程执行OS命令_Runtime.getRuntime().exec的封装与安全限制
jvm·数据库·python
weixin_4597539420 分钟前
SymPy中正确处理含整数参数的三角函数定积分:避免n=0特例干扰结果
jvm·数据库·python