我正在寻找一种通过 NestJS grpc 微服务授权 rpc 的方法。基本上我想在 grpc 客户端中附加一个 token ,该 token 必须由 grpc 服务器验证。我发现this issue ,但我没有得到 grpc.Metadata
作为第二个参数传递的确切位置。
最佳答案
我找到了解决这个问题的方法。当然不是最优雅的解决方案,但它目前有效。一个简化的例子:
// gRPC client
@Get(':id')
async call(@Param() params) {
const metadata = new grpc.Metadata();
// add relevant data to the metadata object (e.g from request header)
metadata.add('role', 'admin');
return this.userService.findOne({ id: +params.id}, metadata);
}
// Service
interface UserService {
findOne(data: {id: number}, metadata: grpc.Metadata): Observable<any>;
}
// gRPC server
@GrpcMethod('UserService', 'FindOne')
async findOne(data: UserById, metadata: grpc.Metadata) {
const meta = metadata.getMap();
// do something with the metadata...
console.log(meta.role);
const items: User= [
{ id: 1, name: 'User 1' },
{ id: 2, name: 'User 2' },
{ id: 3, name: 'User 3' },
];
return items.find(({ id }) => id === data.id);
}
关于node.js - NestJS - grpc 微服务中的元数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54112317/