首页 > 解决方案 > 在 GraphQLServer 中进行身份验证和 PubSub 的正确方法

问题描述

我正在尝试在我的 GraphQL 服务器上使用订阅。我面临的问题是,在初始化 GraphQLServer 时,我不能同时使用中间件来提取我的 JWT 和 PubSub。

这就是我所拥有的:

const server = new GraphQLServer({
    schema,
    context: ({request}) => extractJWT(request),
  });

它适用于这个:

@Mutation(returns => User)
    public async findUser(
        @Ctx() context: IContext,
        @PubSub() pubsub: PubSubEngine,
    ) {
        const user = await User.findById(context.tokenData.userId)
        pubsub.publish('user', { user })
        return user
    }

但是,如果我在 GraphQLServer 初始化上下文中注册 PubSub 并将我的代码更改为下面的代码,我将无法再访问我的 @Ctx 装饰器中的内容。

const pubSub = new PubSub();
const server = new GraphQLServer({
    schema,
    context: {
       ctx: ({request}) => extractJWT(request),
       pubSub
  },
  });

使用 JWT 提取中间件和 PubSub 初始化我的 GraphQLServer 的正确方法是什么?

标签: node.jstypescriptgraphqltypegraphql

解决方案


推荐阅读