Я следил за официальной документацией NestJS. Я успешно настроил аутентификацию по паспорту JWT. Я могу получить доступ к сведениям о пользователе из @Req в контроллерах, но у меня возникают проблемы с доступом к сведениям о пользователе из пользовательской защиты.
Все отлично работает
@UseGuards(RolesGuard)
@Get('me')
getProfile(@Request() req) {
return req.user;
}
Это не так (в настоящее время ведется журнал для отладки)
@Injectable()
export class RolesGuard implements CanActivate {
constructor(private reflector: Reflector) {}
canActivate(context: ExecutionContext): boolean {
const roles = this.reflector.get<string[]>('roles', context.getHandler());
if (!roles) {
console.log('No Roles');
return true;
}
const request = context.switchToHttp().getRequest();
// Returns Undefined
console.log(request.user);
return true;
}
}
Вот как я объявляю каждую запись в контроллере
@Get()
@UseGuards(RolesGuard)
@Roles('admin')
findAll() {
return this.usersService.findAll();
}
Передача метаданных ролей работает нормально, просто похоже, что пользователь не добавляется в контекст на правильном этапе.
Любая помощь будет здоровой, спасибо!
EDIT: обновлен @UseGuards(RolesGuard), скопирован и вставлен неверный вариант
Эй, получаю то же самое, undefined. Раньше я пытался использовать охрану ролей, но скопировал и вставил сюда неправильную версию, устраняя неполадки с туннельным зрением.
Похоже, я это исправил, нужно приковать охранников в соответствии с моим собственным ответом :)