Express + MongoDB 实现登录验证码
使用 svg-captcha 生成 SVG 格式验证码,express-session 存储验证码
一、安装依赖
npm install svg-captcha express-session
二、核心代码示例
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 });
}
});