File size: 1,734 Bytes
971ee24 dbec29e 097ab65 971ee24 dbec29e 971ee24 097ab65 dbec29e 097ab65 971ee24 dbec29e 097ab65 971ee24 097ab65 dbec29e 097ab65 971ee24 dbec29e 097ab65 971ee24 dbec29e 097ab65 971ee24 097ab65 971ee24 097ab65 dbec29e 097ab65 971ee24 097ab65 dbec29e 097ab65 dbec29e |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
const manager = require('../lib/manager'); // 假设路径相对于此文件是正确的
const verify = async (req, res, next) => {
// 1. 从 x-api-key 请求头获取值
const apiKeyHeader = req.headers['x-api-key'];
// 2. 检查请求头是否存在
if (!apiKeyHeader) {
return res.status(401).json({ message: 'Unauthorized' }); // 保持原始错误消息
}
// 3. 准备用于比较的 token,如果存在 "Bearer " 前缀(不区分大小写),则移除
let tokenToCompare = apiKeyHeader;
if (apiKeyHeader.toLowerCase().startsWith('bearer ')) {
tokenToCompare = apiKeyHeader.substring(7); // "Bearer " 长度为 7
}
// 4. 与环境变量中的 AUTH_TOKEN 进行比较
if (tokenToCompare === process.env.AUTH_TOKEN) {
try {
req.account = await manager.getAccount();
if (!req.account) {
// 保持原始错误结构
return res.status(503).json({
error: {
message: '服务暂时不可用,无法获取有效账户',
type: 'service_unavailable',
code: 'account_unavailable'
}
});
}
// console.log(`身份校验成功,使用账号=> ${JSON.stringify(req.account)}`); // 保持原始注释掉的日志
next();
} catch (error) {
console.error('获取账户时出错:', error); // 保持原始的 console.error
// 保持原始错误结构
return res.status(503).json({
error: {
message: '服务暂时不可用',
type: 'service_unavailable',
code: 'internal_error'
}
});
}
} else {
return res.status(401).json({ message: 'Unauthorized' }); // 保持原始错误消息
}
};
module.exports = verify; |