File size: 1,608 Bytes
d455806
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
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'
          }
        });
      }
      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;