Как я могу получить «email_verified» (или любые данные профиля пользователя), не всегда получая «userinfo» каждый раз, когда я вызываю конечные точки? - PullRequest
1 голос
/ 18 марта 2020

Я сейчас создаю 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,
      );
    }
  }
}

Есть ли более дешевое / хорошее решение этой проблемы?

Заранее спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...