diff --git a/backend/server.js b/backend/server.js index bf732a2..d384d61 100644 --- a/backend/server.js +++ b/backend/server.js @@ -75,10 +75,12 @@ app.use(cookieParser()); app.use(session({ secret: process.env.SESSION_SECRET || 'your-session-secret-change-in-production', resave: false, - saveUninitialized: false, + saveUninitialized: true, // 改为true,确保验证码请求时创建session + name: 'captcha.sid', // 自定义session cookie名称 cookie: { secure: process.env.COOKIE_SECURE === 'true', httpOnly: true, + sameSite: 'lax', // 添加sameSite属性 maxAge: 10 * 60 * 1000 // 10分钟 } })); @@ -612,6 +614,15 @@ app.get('/api/captcha', (req, res) => { req.session.captcha = captcha.text.toLowerCase(); req.session.captchaTime = Date.now(); + // 保存session + req.session.save((err) => { + if (err) { + console.error('[验证码] Session保存失败:', err); + } else { + console.log('[验证码] 生成成功, SessionID:', req.sessionID, '验证码:', captcha.text); + } + }); + res.type('svg'); res.send(captcha.data); } catch (error) { @@ -708,6 +719,8 @@ app.post('/api/login', // 如果需要验证码,则验证验证码 if (needCaptcha) { + console.log('[登录验证] 需要验证码, SessionID:', req.sessionID, 'IP失败次数:', ipFailures, '用户名失败次数:', usernameFailures); + if (!captcha) { return res.status(400).json({ success: false, @@ -720,7 +733,10 @@ app.post('/api/login', const sessionCaptcha = req.session.captcha; const captchaTime = req.session.captchaTime; + console.log('[登录验证] Session验证码:', sessionCaptcha, '输入验证码:', captcha, 'Session时间:', captchaTime); + if (!sessionCaptcha || !captchaTime) { + console.log('[登录验证] 验证码不存在于Session中'); return res.status(400).json({ success: false, message: '验证码已过期,请刷新验证码', @@ -730,6 +746,7 @@ app.post('/api/login', // 验证码有效期5分钟 if (Date.now() - captchaTime > 5 * 60 * 1000) { + console.log('[登录验证] 验证码已超过5分钟'); return res.status(400).json({ success: false, message: '验证码已过期,请刷新验证码', @@ -738,6 +755,7 @@ app.post('/api/login', } if (captcha.toLowerCase() !== sessionCaptcha) { + console.log('[登录验证] 验证码不匹配'); return res.status(400).json({ success: false, message: '验证码错误', @@ -745,6 +763,7 @@ app.post('/api/login', }); } + console.log('[登录验证] 验证码验证通过'); // 验证通过后清除session中的验证码 delete req.session.captcha; delete req.session.captchaTime;