更新nestjs/graphql后没有通过标头

Posted

技术标签:

【中文标题】更新nestjs/graphql后没有通过标头【英文标题】:Header are not passed through after updating nestjs/graphql 【发布时间】:2019-02-07 02:59:50 【问题描述】:

我即将将我的项目依赖项更新到下一个主要版本,但我无法让 nestjs/graphql + nestjs/passport 工作。 看起来请求标头没有通过阿波罗服务器。每次当护照尝试从标头中提取不记名令牌时,我都会收到以下堆栈跟踪的异常:

TypeError:无法读取未定义的属性“标题”, 在 JwtStrategy._jwtFromRequest (/Users/wowa/workspace/foxcms-backend/node_modules/passport-jwt/lib/extract_jwt.js:58:21), 在 JwtStrategy.authenticate (/Users/wowa/workspace/foxcms-backend/node_modules/passport-jwt/lib/strategy.js:93:22), 在尝试(/Users/wowa/workspace/foxcms-backend/node_modules/passport/lib/middleware/authenticate.js:361:16)”, 在验证(/Users/wowa/workspace/foxcms-backend/node_modules/passport/lib/middleware/authenticate.js:362:7)”, 在 Promise (/Users/wowa/workspace/foxcms-backend/node_modules/@nestjs/passport/dist/auth.guard.js:77:3)", 在新的 Promise ()", 在 /Users/wowa/workspace/foxcms-backend/node_modules/@nestjs/passport/dist/auth.guard.js:69:83", 在 MixinAuthGuard。 (/Users/wowa/workspace/foxcms-backend/node_modules/@nestjs/passport/dist/auth.guard.js:44:36)", 在 Generator.next ()", 在 /Users/wowa/workspace/foxcms-backend/node_modules/@nestjs/passport/dist/auth.guard.js:19:71"

这就是我的 app.module 的样子:



@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 上打开一个问题之前在这里问一下。有谁知道怎么了?

【问题讨论】:

你好@w0wka91 我也面临这个错误。你能告诉我你是怎么恢复的吗?下面由cethap写的答案甚至没有解决我的问题。 【参考方案1】:

您可以使用此表单管理对象请求:

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

并创建自己的 Guard:

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;
    
  

【讨论】:

【参考方案2】:

护照模块提供的 AuthGuard 当前无法与 graphql 模块一起使用。 https://github.com/nestjs/graphql/issues/48

【讨论】:

以上是关于更新nestjs/graphql后没有通过标头的主要内容,如果未能解决你的问题,请参考以下文章

从 NestJS + GraphQL 更改 ValidationPipe 错误

NestJS GraphQL 数据源

Nestjs - @nestjs/graphql GraphQLGatewayModule 总是返回错误请求

实现 GraphQLModule 时 GraphQL 的 NestJS 问题

错误:使用 Nestjs + Graphql + Typeorm 时无法确定 GraphQL 输入类型

Nestjs Graphql