diff --git a/backend/server.js b/backend/server.js index 07bc224..a3730f7 100644 --- a/backend/server.js +++ b/backend/server.js @@ -1116,19 +1116,26 @@ function verifyCaptcha(req, captcha) { const sessionCaptcha = req.session.captcha; const captchaTime = req.session.captchaTime; + // 调试日志 + console.log('[验证码验证] SessionID:', req.sessionID, '输入:', captcha?.toLowerCase(), 'Session中:', sessionCaptcha); + if (!sessionCaptcha || !captchaTime) { + console.log('[验证码验证] 失败: session中无验证码'); return { valid: false, message: '验证码已过期,请刷新验证码' }; } // 验证码有效期5分钟 if (Date.now() - captchaTime > 5 * 60 * 1000) { + console.log('[验证码验证] 失败: 验证码已超时'); return { valid: false, message: '验证码已过期,请刷新验证码' }; } if (captcha.toLowerCase() !== sessionCaptcha) { + console.log('[验证码验证] 失败: 验证码不匹配'); return { valid: false, message: '验证码错误' }; } + console.log('[验证码验证] 成功'); // 验证通过后清除session中的验证码 delete req.session.captcha; delete req.session.captchaTime; @@ -1172,18 +1179,19 @@ app.get('/api/captcha', captchaRateLimitMiddleware, (req, res) => { req.session.captcha = captcha.text.toLowerCase(); req.session.captchaTime = Date.now(); - // 保存session + // 保存session后再返回响应(修复:确保session保存成功) req.session.save((err) => { if (err) { console.error('[验证码] Session保存失败:', err); - } else { - // 安全:不记录验证码明文到日志 - console.log('[验证码] 生成成功, SessionID:', req.sessionID); + return res.status(500).json({ + success: false, + message: '验证码生成失败' + }); } + console.log('[验证码] 生成成功, SessionID:', req.sessionID); + res.type('svg'); + res.send(captcha.data); }); - - res.type('svg'); - res.send(captcha.data); } catch (error) { console.error('生成验证码失败:', error); res.status(500).json({