Я сейчас создаю REST API, используя Nest JS, и я выбираю Auth0 в качестве полнофункциональной службы аутентификации. В настоящее время я застрял, чтобы проверить email_verified
для определенных конечных точек. Позвольте привести пример для ясности: клиент вызывает конечную точку пользователя обновления (например, [POST] ... / user), и я хотел бы убедиться, что адрес электронной почты пользователя был проверен, прежде чем я позвоню в службу из controller.
Это было бы легко сделать, если бы @Request req.user
содержал email_verified
, так как я могу создать канал и проверить значение этого атрибута и выдать исключение, если оно ложно. Но поскольку токен Auth0 Bearer является токеном доступа, он не содержит такой информации. Поэтому я могу вызвать конечную точку gethser Auth0 в пользовательском канале проверки и получить этот атрибут email_verified
.
Это решение, требующее значительных ресурсов, так что каждый вызов конечной точки имеет дополнительный вызов API для информация о пользователе.
Вот мой канал:
import {
Injectable,
PipeTransform,
HttpException,
HttpStatus,
} from '@nestjs/common';
import { UserManagement } from '@src/user/user.management';
@Injectable()
export class EmailVerifiedPipe implements PipeTransform {
private readonly userManagement: UserManagement;
constructor() {
this.userManagement = new UserManagement();
}
async transform(value: any) {
// TRY TO AVOID THIS SECTION
const { email_verified } = await this.userManagement.managementClient.getUser({
id: value.sub
});
// SECTION END
if (email_verified) {
return value;
} else {
throw new HttpException(
'Bad request: Email not verified',
HttpStatus.BAD_REQUEST,
);
}
}
}
Есть ли более дешевое / хорошее решение этой проблемы?
Заранее спасибо.