Заголовок не пропускается после обновления nestjs / graphql - PullRequest
0 голосов
/ 01 сентября 2018

Я собираюсь обновить зависимости моего проекта до следующих основных версий, но я не могу заставить работать nestjs / graphql + nestjs / passport. Похоже, что заголовок запроса не передается через сервер Apollo. Каждый раз, когда паспорт пытается извлечь токен носителя из заголовка, я получаю исключение со следующей трассировкой стека:

TypeError: Cannot read property 'headers' of undefined,
    at JwtStrategy._jwtFromRequest (/Users/wowa/workspace/foxcms-backend/node_modules/passport-jwt/lib/extract_jwt.js:58:21),
    at JwtStrategy.authenticate (/Users/wowa/workspace/foxcms-backend/node_modules/passport-jwt/lib/strategy.js:93:22),
    at attempt (/Users/wowa/workspace/foxcms-backend/node_modules/passport/lib/middleware/authenticate.js:361:16)",
    at authenticate (/Users/wowa/workspace/foxcms-backend/node_modules/passport/lib/middleware/authenticate.js:362:7)",
    at Promise (/Users/wowa/workspace/foxcms-backend/node_modules/@nestjs/passport/dist/auth.guard.js:77:3)",
    at new Promise ()",
    at /Users/wowa/workspace/foxcms-backend/node_modules/@nestjs/passport/dist/auth.guard.js:69:83",
    at MixinAuthGuard. (/Users/wowa/workspace/foxcms-backend/node_modules/@nestjs/passport/dist/auth.guard.js:44:36)",
    at Generator.next ()",
    at /Users/wowa/workspace/foxcms-backend/node_modules/@nestjs/passport/dist/auth.guard.js:19:71"

Вот так выглядит мой app.module:

</p>

<pre><code>@Module({
  imports: [
    GraphQLModule.forRoot({
      typePaths: ['./src/**/*.graphql'],
    }),
    UserModule,
    ContentTypeModule,
    PrismaModule,
    ProjectModule,
    AuthModule,
  ],
})
export class AppModule implements NestModule {
  constructor(
    private readonly graphQLFactory: GraphQLFactory,
    @Inject('PrismaBinding') private prismaBinding,
  ) {}
  configure(consumer: MiddlewareConsumer) {}
}

Я просто хотел спросить здесь, прежде чем открыть вопрос на github. Кто-нибудь идея, что не так?

Ответы [ 2 ]

0 голосов
/ 18 сентября 2018

Вы можете управлять запросом объекта с помощью этой формы:

GraphQLModule.forRoot({ typePaths: ['./**/*.graphql'], installSubscriptionHandlers: true, context: ({ req }) => { return { request: req, }; },

И создайте свою собственную гвардию:

export class CatsGuard implements CanActivate {
  constructor(readonly jwtService: JwtService/*, readonly userService: UsersService*/) {}
  canActivate(context: ExecutionContext): boolean {
    const ctx = GqlExecutionContext.create(context);
    const request = ctx.getContext().request;
    const Authorization = request.get('Authorization');

    if (Authorization) {
      const token = Authorization.replace('Bearer ', '');
      const { userId } = this.jwtService.verify(token) as { userId: string };
      return !!userId;
    }
  }
}

`

0 голосов
/ 04 сентября 2018

Предоставленный AuthGuard из модуля паспорта в настоящее время не работает с модулем graphql. https://github.com/nestjs/graphql/issues/48

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