Могу ли я отрицать охрану Nest JS? - PullRequest
0 голосов
/ 19 февраля 2020

У меня AuthGuard из @nestjs/passport используется для одного моего метода (маршрута), например:

  @UseGuards(AuthGuard('jwt'))
  @Get('profile')
  getProfile(@Req() req) {
    return this.userService.findOne(req.user.id);
  }

Можно ли отменить эту защиту, поэтому только пользователи без JWT могут go желоб ? Я не хочу, чтобы пользователи с JWT в заголовке могли случайно получить доступ к маршруту входа / регистрации.

1 Ответ

1 голос
/ 19 февраля 2020

Как сказала Башли в своем комментарии, вы можете создать свою собственную охрану, которая проверяет 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)

...