const jwt = require('jsonwebtoken'); const JWT_SECRET = process.env.JWT_SECRET; /** * Express middleware: validates JWT from httpOnly cookie or Authorization Bearer header. * Attaches decoded user payload to req.user on success. * Returns 401 for missing or invalid tokens. */ function authMiddleware(req, res, next) { let token = null; // Prefer httpOnly cookie if (req.cookies && req.cookies.token) { token = req.cookies.token; } else if (req.headers.authorization && req.headers.authorization.startsWith('Bearer ')) { token = req.headers.authorization.slice(7); } if (!token) { return res.status(401).json({ error: 'Authentication required' }); } try { const payload = jwt.verify(token, JWT_SECRET); req.user = payload; next(); } catch { return res.status(401).json({ error: 'Invalid or expired session' }); } } module.exports = { authMiddleware };