想象一下我们在 NestJS 中有这样的代码。不管是
Guard
还是Interceptor
。
一般来说,您可以访问ExecutionContext的地方。
import { CanActivate } from "@nestjs/common";
export class MyCustomGuard implements CanActivate {
constructor() {}
async canActivate(context: ExecutionContext): Promise<boolean> {
const ctx = context.getType();
if (ctx !== "rpc") return true;
const rpc = context.switchToRpc();
// ip validation
return true;
}
}
如何在 grpc 上下文中获取客户端 IP 地址?
经过一番挖掘,我发现了这个。我们可以在
ServerWritableStreamImpl
实例中发现客户端 IP 地址 args[2]
import { CanActivate } from "@nestjs/common";
export class MyCustomGuard implements CanActivate {
constructor() {}
async canActivate(context: ExecutionContext): Promise<boolean> {
const ctx = context.getType();
if (ctx !== "rpc") return true;
const rpc = context.switchToRpc();
const [ip, port] = context.switchToRpc().args[2].call.getPeer().split(":");
return true;
}
}
相关有用链接: 如何使用节点grpc获取客户端IP地址