40 lines
920 B
JavaScript

// 认证中间件
const jwt = require('jsonwebtoken');
const authMiddleware = (req, res, next) => {
const authHeader = req.headers.authorization;
if (!authHeader || !authHeader.startsWith('Bearer ')) {
return res.status(401).json({
error: '未提供认证令牌',
code: 'AUTH_TOKEN_MISSING',
});
}
const token = authHeader.substring(7);
try {
const decoded = jwt.verify(token, process.env.CUBEJS_SECRET);
req.user = decoded;
next();
} catch (error) {
return res.status(401).json({
error: '无效的认证令牌',
code: 'AUTH_TOKEN_INVALID',
});
}
};
// 角色检查中间件
const requireRole = (...roles) => {
return (req, res, next) => {
if (!roles.includes(req.user.role)) {
return res.status(403).json({ error: '权限不足' });
}
next();
};
};
module.exports = authMiddleware;
module.exports.requireRole = requireRole;