Node.js登录系统服务器未记录会话,auth-check始终返回未登录的问题求助
Node.js登录系统服务器未记录会话,auth-check始终返回未登录的问题求助
大家好,我正在搭建一个基础的登录系统,目前注册功能完全正常,登录接口也能正常连接数据库,返回200 OK和{"success":true}的响应,但现在遇到了一个棘手的问题:服务器完全没有记录登录状态,我看不到任何能证明服务器识别已登录的cookie或其他标识。
我用的是Node.js,后端部署在自己的Ubuntu VPS上,之前找ChatGPT问过但没解决问题,来这里求助各位大佬。
我主要用到两个接口:/api/login和/api/auth-check。登录接口正常返回成功,但调用/api/auth-check时,服务器返回304 Not Modified,响应体是{"loggedIn":false}。我已经确认前端所有请求这两个接口的fetch都加了credentials: 'include'。
我需要服务器记录会话/ cookie的原因是:登录后要隐藏登录、注册按钮,换成“退出登录”和用户相关内容,同时网站里还有一些需要登录才能操作的功能逻辑要依赖这个状态。
下面是我的后端代码:
/api/login接口代码
app.post('/api/login', async (req, res) => { try { const { email, password } = req.body; if (!email || !password) { return res.status(400).json({ error: 'Missing email or password' }); } const [rows] = await db.query( 'SELECT user_id, password FROM users WHERE email = ?', [email] ); if (!rows.length) { return res.status(401).json({ error: 'Invalid email or password' }); } const user = rows[0]; if (user.password !== password) { return res.status(401).json({ error: 'Invalid email or password' }); } req.session.userId = user.id; return res.json({ success: true }); } catch (error) { console.error('Login error:', error); return res.status(500).json({ error: 'Server error' }); } });
/api/auth-check接口代码
app.get('/api/auth-check', async (req, res) => { if (!req.session.userId) { return res.json({ loggedIn: false }); } try { const [rows] = await db.query( 'SELECT email FROM users WHERE user_id = ?', [req.session.userId] ); if (!rows.length) { return res.json({ loggedIn: false }); } return res.json({ loggedIn: true, email: rows[0].email, }); } catch (error) { console.error('Auth check error:', error); return res.status(500).json({ error: 'Server error' }); } });
麻烦各位帮忙看看哪里出问题了,为什么服务器没法记录登录会话呢?
备注:内容来源于stack exchange,提问作者phoenix56
相关产品推荐
相关产品推荐

