瀏覽代碼

改进二维码控制器中的IP地址获取逻辑,优先使用代理头部信息以确保准确记录用户真实IP地址。

wuyi 1 周之前
父節點
當前提交
4155ed55a0
共有 1 個文件被更改,包括 13 次插入2 次删除
  1. 13 2
      src/controllers/qr-code.controller.ts

+ 13 - 2
src/controllers/qr-code.controller.ts

@@ -145,8 +145,19 @@ export class QrCodeController {
         return reply.code(400).send({ message: '请提供参数' })
       }
 
-      // 记录扫描
-      const ipAddress = request.ip || request.socket.remoteAddress
+      // 记录扫描 - 获取真实IP地址
+      let ipAddress = request.headers['x-forwarded-for'] as string
+      if (ipAddress) {
+        // x-forwarded-for 可能包含多个IP,取第一个(真实客户端IP)
+        ipAddress = ipAddress.split(',')[0].trim()
+      } else {
+        // 如果没有 x-forwarded-for,尝试其他常见的代理头
+        ipAddress = (request.headers['x-real-ip'] as string) || 
+                   (request.headers['cf-connecting-ip'] as string) ||
+                   request.ip || 
+                   request.socket.remoteAddress || 
+                   'unknown'
+      }
       const userAgent = request.headers['user-agent']
 
       // 如果通过 qrCode 查询,记录扫描