如何在NestJS的gRPC上下文环境中获取客户端IP地址
在NestJS的gRPC上下文中获取客户端IP地址
在NestJS的gRPC场景里,客户端IP信息存储在原始的gRPC调用对象中,你可以通过ExecutionContext提供的方法提取到它,具体操作如下:
- 通过
switchToRpc()获取RPC上下文对象 - 从RPC上下文里拿到原始的gRPC调用实例(
call对象) - 从
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
相关产品推荐
相关产品推荐

