首页 > 解决方案 > 如何访问 request.user nestjs 微服务?

问题描述

我有一个带有 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);
    }
}

标签: scopemicroservicesnestjsrequestcontext

解决方案


推荐阅读