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

问题描述 投票:0回答:1

我正在使用带有 Passport-jwt 的 NestJS 10。我有一个控制器方法,用户可以在其中访问是否在授权标头中包含有效的 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 controller nestjs passport-jwt
1个回答
0
投票

try/catch
周围添加一个
super.canActivate
,这样如果抛出错误它仍然可以返回true

© www.soinside.com 2019 - 2024. All rights reserved.