我已经AuthGuard
使用@nestjs/passport
了我的一种方法(路线),如下所示:
@UseGuards(AuthGuard('jwt'))
@Get('profile')
getProfile(@Req() req) {
return this.userService.findOne(req.user.id);
}
我可以否定这个守卫,所以只有没有 JWT 的用户才能通过?我不希望标头中带有 JWT 的用户意外访问登录/注册路由。
我已经AuthGuard
使用@nestjs/passport
了我的一种方法(路线),如下所示:
@UseGuards(AuthGuard('jwt'))
@Get('profile')
getProfile(@Req() req) {
return this.userService.findOne(req.user.id);
}
我可以否定这个守卫,所以只有没有 JWT 的用户才能通过?我不希望标头中带有 JWT 的用户意外访问登录/注册路由。
正如 bashleigh 在她的评论中所说,您可以创建自己的警卫来检查 jwt 并拒绝它是否进入。一个简单的例子可能是
@Injectable()
export class NoJwtGuard implements CanActivate {
canActivate(context: ExecutionContext): boolean {
const req = context.switchToHttp().getRequest();
const auth = req.headers['Authroization'];
// as you should not have any authorization headers you an reject if the header exists
return !auth;
}
}
虽然不可能立即否定内置防护,但您也可以在AuthGuard('jwt')
您的自定义实现中扩展canActivate
return !super.canActivate(context)