Where can I attach the database user to the request after finishing the validation in the auth guard?
Я считаю, что Guard, как вы заметили, должен проверить, если данный пользователь имеет право использовать данный метод.
В зависимости от ваших потребностей, вы можете перейти к различнымпути:
1) использовать паспорт и стратегию, чтобы делать то, что вам нужно (https://stackoverflow.com/a/57929429/4319037 Я уже написал несколько слов и строк об этом). Более того, он уже охватит большую часть кода, необходимого для извлечения токена.
@Injectable()
export class HttpStrategy extends PassportStrategy(Strategy) {
constructor(private readonly authService: AuthService) {
super()
}
async validate(token: string) {
const user = await this.authService.findUserByToken(token);
if (!user) {
throw new UnauthorizedException();
}
return user;
}
}
2) используйте Interceptor
на уровне контроллера / метода, чтобы присоединить пользователя к данному запросу (и бросить, если токенотсутствует);ваша охрана уже получит user
, поэтому вы можете проверить, есть ли у пользователя правильная роль / права для выполнения метода.
Пожалуйста, дайте мне знать, если я неправильно понял, чего вы хотите достичь, или вам нужна более подробная информация оконкретный способ, спасибо!