我正在使用带有 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?
在
try/catch
周围添加一个super.canActivate
,这样如果抛出错误它仍然可以返回true