我有一个带有 api 网关的微服务设置,它接受 http 请求并使用消息模式将它们传递给微服务(媒体服务、支付服务等)。
我可以访问 api-gateway 中的 request.user,它为我提供了来自解码的 jwt 的经过身份验证的用户。我想要的是,将它传递给媒体微服务并在媒体服务的功能中访问它。
我如何实现这一目标?
api-gateway 中的控制器
export class MediasController {
constructor(@Inject('MEDIA_SERVICE') private client: ClientProxy) { }
@Get()
@UseGuards(AuthGuard('jwt'))
async find(@Query() query: QueryArgs): Promise<any> {
const pattern = { cmd: 'media-find' };
return await this.client.send<any>(pattern, query)
}
}
媒体微服务中的控制器和服务
媒体控制器.ts@Controller({ path: 'medias', scope: Scope.REQUEST })
export class MediasController {
constructor(private readonly mediasService: MediasService) { }
@MessagePattern({ cmd: 'media-find' })
async find(query: any): Promise<any> {
return await this.mediasService.find(query)
}
}
媒体服务.ts
export class MediasService {
constructor(@InjectRepository(Media) private readonly mediaRepository: Repository<Media>) {
}
async find(query): Promise<Media[]> {
// access request.user here
return await this.mediaRepository.find(query);
}
}