You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在NestJS的gRPC上下文环境中获取客户端IP地址

在NestJS的gRPC上下文中获取客户端IP地址

在NestJS的gRPC场景里,客户端IP信息存储在原始的gRPC调用对象中,你可以通过ExecutionContext提供的方法提取到它,具体操作如下:

  1. 通过switchToRpc()获取RPC上下文对象
  2. 从RPC上下文里拿到原始的gRPC调用实例(call对象)
  3. 从call.peer属性中解析出客户端IP(该属性格式为IP:端口,需要剥离端口部分)

修改后的完整Guard代码示例:

import { CanActivate, ExecutionContext } from "@nestjs/common";

export class MyCustomGuard implements CanActivate {
  async canActivate(context: ExecutionContext): Promise<boolean> {
    const ctxType = context.getType();
    if (ctxType !== "rpc") return true;

    const rpc = context.switchToRpc();
    const call = rpc.getContext();
    
    // 兼容IPv4(如192.168.1.1:12345)和IPv6(如[::1]:12345)格式,提取纯IP
    const clientIp = call.peer.split(':').slice(0, -1).join(':');
    
    // 在这里执行你的IP验证逻辑
    // 示例:if (!isValidIp(clientIp)) return false;

    return true;
  }
}

补充说明

  • call.peer返回的字符串包含IP和端口,拆分后去掉最后一段端口即可得到纯IP地址
  • 该方法适用于所有能访问到ExecutionContext的场景,包括Guard、Interceptor等

内容的提问来源于stack exchange,提问作者Iman Hosseinipour

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 17:34:53