NestJS - Метаданные в микросервисе GRPC - PullRequest
0 голосов
/ 09 января 2019

Я ищу способ авторизации rpc через микросервисы NestJS grpc. В основном я хочу прикрепить токен в клиенте grpc, который должен быть проверен сервером grpc. Я нашел эту проблему , но я не понял, где именно grpc.Metadata передается в качестве второго аргумента.

1 Ответ

0 голосов
/ 20 января 2019

Я нашел способ решить эту проблему. Конечно, не самое элегантное решение, но пока оно работает. Упрощенный пример:

// 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);
}
...