Могу ли я отказаться от защиты NestJS?
У меня есть AuthGuard
из @nestjs/passport
используется в одном моем методе (маршруте) следующим образом:
@UseGuards(AuthGuard('jwt'))
@Get('profile')
getProfile(@Req() req) {
return this.userService.findOne(req.user.id);
}
Могу ли я отключить эту защиту, чтобы только пользователи без JWT могли пройти через нее? Я не хочу, чтобы пользователи с JWT в заголовке случайно получали доступ к маршруту входа / регистрации.
1 ответ
Как сказала Башли в своем комментарии, вы можете создать свою собственную охрану, которая проверяет наличие 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)