/** * JWT认证中间件 */ const jwt = require('jsonwebtoken'); const JWT_SECRET = process.env.JWT_SECRET || 'duoduo-career-jwt-secret-key-2024'; /** * 验证JWT Token */ const verifyToken = (req, res, next) => { try { // 从请求头获取token const token = req.headers.authorization?.replace('Bearer ', ''); if (!token) { return res.status(401).json({ success: false, message: '未提供认证令牌' }); } // 验证token const decoded = jwt.verify(token, JWT_SECRET); req.user = decoded; next(); } catch (error) { if (error.name === 'TokenExpiredError') { return res.status(401).json({ success: false, message: '令牌已过期,请重新登录' }); } return res.status(401).json({ success: false, message: '无效的认证令牌' }); } }; /** * 验证管理员权限 */ const verifyAdmin = (req, res, next) => { if (req.user.role !== 'admin') { return res.status(403).json({ success: false, message: '需要管理员权限' }); } next(); }; /** * 可选的Token验证(用于获取登录状态但不强制要求) */ const optionalAuth = (req, res, next) => { try { const token = req.headers.authorization?.replace('Bearer ', ''); if (token) { const decoded = jwt.verify(token, JWT_SECRET); req.user = decoded; } } catch (error) { // 忽略错误,继续执行 } next(); }; module.exports = { verifyToken, verifyAdmin, optionalAuth };