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;