提问人:Dave 提问时间:11/17/2023 更新时间:11/18/2023 访问量:15
在 NestJS 和 passport 中,如何创建接受有效或无效 JWT 的端点?
In NestJS and passport, how do I create an endpoint that accepts a valid or invalid JWT?
问:
我正在将 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?
答:
0赞
Jay McDoniel
11/18/2023
#1
在 周围添加一个,这样如果它抛出错误,它仍然可以返回 truetry/catch
super.canActivate
评论