更新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 - @nestjs/graphql GraphQLGatewayModule 总是返回错误请求
实现 GraphQLModule 时 GraphQL 的 NestJS 问题