Как использовать паспорт в промежуточном программном обеспечении nestjs?

Я пытаюсь написать промежуточное ПО для аутентификации. Проблема в том, что моя установка выдает сообщение «Без аутентификации» каждый раз, когда я пытаюсь что-то сделать.

Мое промежуточное ПО:

@Middleware()
export class AuthMiddleware implements NestMiddleware {
  constructor(
    @Inject(constants.logger) private logger: Winston,
  ){}

  resolve(...args: any[]): ExpressMiddleware {
    return passport.authenticate('jwt', { session: false });
  }
}

JwtStrategy класс:

@Component()
export class JwtStrategy extends Strategy {
  constructor(
    private readonly authService: AuthService,
    @Inject(constants.config) private readonly config: Config,
  ) {
    super(
      {
        jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(),
        passReqToCallback: true,
        secretOrKey: config.JWT_SECRET,
      },
      async (req, payload, next) => {
        console.log('hello from verifycb');
        next(null, payload);
      },
    );
    passport.use('jwt', this);
  }

  public async verify(req, payload: TokenData, done) {
    console.log('JwtStrategy::verify(req, payload)', {req, payload});
    const isValid = await this.authService.isUserValid(payload);
    if (!isValid) {
      return done('Unauthorized 22', false);
    }
    done(null, payload);
  }
}

Я уверен, что звонило мое промежуточное ПО. Я использую это странным образом или как?


person Tymur Valiiev    schedule 27.02.2018    source источник
comment
Если найдете решение, напишите ответ! Еще не так много экспертов Nestjs по SO.   -  person Preston    schedule 01.03.2018
comment
все еще нет решения, поэтому я разбил его   -  person Tymur Valiiev    schedule 03.03.2018


Ответы (1)


Возможно, будет немного поздно, но вам нужно явно consume указать промежуточное ПО в своих модулях.

// active.module.ts

@Module({
    ...
})
export class ActiveModule implements NestModule {
    public configure(consumer: MiddlewaresConsumer) {
        consumer.apply(JwtMiddleware).forRoutes(
            {path: '/api/lists/create', method: RequestMethod.POST}
        );
    }
}

В этом примере JwtMiddleware - это мое промежуточное ПО, такое же, как ваш AuthMiddleware.

//active.controller.ts

@Controller('lists')
export class ActiveController {
    @Post('create')
    async create(@Req() request: Request) {
         // req.user will be available for you
    }
}
person Chau Tran    schedule 11.04.2018
comment
Так что вы думаете об этой структуре? Тебе нравится с ним работать? Когда я смотрю на это, это кажется ужасным (NgModule - это презренный хакер и кое-что, что было навязано между кандидатами на выпуск, что угодно, только не хорошо спроектированное), и заявленная причина его существования, на мой взгляд, не является убедительной. Просто любопытно, я знаю, что это не по теме. - person Aluan Haddad; 11.04.2018
comment
На данный момент мне нравится с ним работать. В структуре нет ничего плохого, кроме отсутствия хороших руководств / документации / реализаций, которые можно добавить / запросить. Я не уверен, что понимаю вашу точку зрения, но мне это нравится. Пока не выйдет Loopback4, я придерживаюсь NestJS. - person Chau Tran; 11.04.2018
comment
Когда я впервые начал пробовать фреймворк, я подумал о extra-overhead, но теперь мне нравится применяемый подход. Следует отметить, что я также являюсь разработчиком Angular, поэтому я фанат этой структуры;) - person Chau Tran; 11.04.2018
comment
Я также разработал приложения angular, одно строго веб-приложение и одно мобильное приложение ionic. Я очень ценю ваши ответы. Меня раздражают не накладные расходы на производительность, а сложность абстракции, а также бремя избыточности и ремонтопригодности сервера, заложенное в самом его дизайне, концепции не лишенного избыточного модуля поверх другого, угловой модуль является сложным и, как продемонстрировано, другим. другими фреймворками, ненужными, что усиливает мою сильную неприязнь к идее его обобщения. - person Aluan Haddad; 11.04.2018
comment
Он не только практически буквально дублирует граф зависимостей, но в то же время оказывается не поддающимся инструментам, поскольку по своей сути непрозрачен и выражается в терминах самых пустых типов (new<T>(...args) => T)[] почти бессмысленно). Этот механизм организации кода отвратителен и тратит впустую возможности как JavaScript, так и TypeScript поверх него. И это определенно было запоздалой мыслью, как мы знаем из истории фреймворка. - person Aluan Haddad; 11.04.2018