Node.js Nestjs如何将数据从AuthGuard传递到控制器

Node.js Nestjs如何将数据从AuthGuard传递到控制器,node.js,api,security,authentication,nestjs,Node.js,Api,Security,Authentication,Nestjs,我有两个微服务,一个用于身份验证,另一个用于用户。我可以登录并获取令牌,并且我只能在登录时使用受保护的路由。但是,我想使用AuthGuard的canActivate函数中获得的用户ID,但在控制器中无法访问它。最好的方法是什么 我的授权守卫: import { CanActivate, ExecutionContext, Inject, Logger } from '@nestjs/common'; import { ClientProxy } from '@nestjs/microservic

我有两个微服务,一个用于身份验证,另一个用于用户。我可以登录并获取令牌,并且我只能在登录时使用受保护的路由。但是,我想使用AuthGuard的canActivate函数中获得的用户ID,但在控制器中无法访问它。最好的方法是什么

我的授权守卫:

import { CanActivate, ExecutionContext, Inject, Logger } from '@nestjs/common';
import { ClientProxy } from '@nestjs/microservices';

export class JwtAuthGuard implements CanActivate {
  constructor(
    @Inject('AUTH_CLIENT')
    private readonly client: ClientProxy,
  ) {}

  async canActivate(context: ExecutionContext): Promise<boolean> {
    const req = context.switchToHttp().getRequest();

    try {
      const res = await this.client
        .send(
          { role: 'auth', cmd: 'check' },
          { jwt: req.headers['authorization']?.split(' ')[1] },
        )
        .toPromise<boolean>();

      return res;
    } catch (err) {
      Logger.error(err);
      return false;
    }
  }
}

将您在AuthGuard中获得的
userId
附加到
req
对象,然后您可以在控制器中访问它:

  @UseGuards(JwtAuthGuard)
  @Get('greet')
  async greet(@Request() req): Promise<string> {
    return 'AUTHENTICATED!' + req;
  }
//在AuthGuard中获取auth用户后,按如下方式附加其ID
req.userId=authUser.id
在控制器中,您可以这样访问它:

@UseGuards(JwtAuthGuard)
@得到(‘问候’)
异步问候(@Request()req):承诺{
返回'AUTHENTICATED USER ID!'+req.userId;
}

将您在AuthGuard中获得的
用户ID
附加到
req
对象,然后您可以在控制器中访问它:

  @UseGuards(JwtAuthGuard)
  @Get('greet')
  async greet(@Request() req): Promise<string> {
    return 'AUTHENTICATED!' + req;
  }
//在AuthGuard中获取auth用户后,按如下方式附加其ID
req.userId=authUser.id
在控制器中,您可以这样访问它:

@UseGuards(JwtAuthGuard)
@得到(‘问候’)
异步问候(@Request()req):承诺{
返回'AUTHENTICATED USER ID!'+req.userId;
}