在 NestJS 和 passport 中,如何创建接受有效或无效 JWT 的端点?

In NestJS and passport, how do I create an endpoint that accepts a valid or invalid JWT?

提问人:Dave 提问时间:11/17/2023 更新时间:11/18/2023 访问量:15

问:

我正在将 NestJS 10 与 passport-jwt 一起使用。我有一个控制器方法,用户可以在其中访问他们是否在 Authorization 标头中包含有效的 JWT。如果它们包含 JWT,我想知道用户是谁

  @UseGuards(OptionalAccessTokenGuard)
  @Post('paymentIntent')
  createPaymentIntent(
    @Req() req: Request,
    @Body() createOrderDto: CreateOrderDto,
  ): Promise<PaymentIntent> {
    const userId = req?.user['sub'];
    return this.ordersService.createPaymentIntent(userId, createOrderDto);
  }

我所拥有的守卫是这样定义的

@Injectable()
export class OptionalAccessTokenGuard extends AuthGuard('jwt') {
  async canActivate(context: ExecutionContext) {
    await super.canActivate(context);
    return true;
  }
}

问题是,如果用户提交了无效的 JWT(它已过期或存在其他问题),此方法将返回 401。如何调整防护或方法,以便提交无效或过期的 JWT 仍允许该方法继续,只是未获取用户 ID?

JWT 控制器 nestjs passport-jwt

评论


答:

0赞 Jay McDoniel 11/18/2023 #1

在 周围添加一个,这样如果它抛出错误,它仍然可以返回 truetry/catchsuper.canActivate