You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

升级Apollo v4后Context为undefined的问题求助

解决Apollo v4升级后TypeGraphQL AuthChecker中Context为undefined的问题

核心原因

TypeGraphQL的AuthChecker无法获取Apollo v4配置的上下文,是因为两者的上下文传递逻辑未正确关联,或TypeGraphQL的Schema构建配置缺失。

解决方案

1. 升级TypeGraphQL到兼容Apollo v4的版本

确保type-graphql版本适配Apollo v4,至少更新到^1.1.1以上:

npm install type-graphql@latest

2. 配置TypeGraphQL Schema透传Apollo上下文

在buildSchema时添加context配置,将Apollo的执行上下文直接传递给TypeGraphQL的上下文系统:

import { buildSchema } from 'type-graphql';
import { myAuthChecker } from './auth-checker';
import { YourResolvers } from './resolvers';

export const schema = await buildSchema({
  resolvers: [YourResolvers],
  authChecker: myAuthChecker,
  // 透传Apollo上下文到TypeGraphQL
  context: ({ context }) => context,
});

3. 修正Apollo Server的Context配置

无需嵌套context字段,直接返回上下文对象:

import { startStandaloneServer } from '@apollo/server/standalone';
import { schema } from './schema';

const { url } = await startStandaloneServer(schema, {
  listen: { port: 3000 },
  context: async ({ req }) => {
    try {
      const { token } = req.headers;
      console.log(`Token: ${token}`);
      // 直接返回上下文对象
      return { token };
    } catch {
      return {};
    }
  },
});

4. 确认AuthChecker的泛型与上下文类型匹配

保证MyContext类型和实际返回的上下文结构一致:

export type MyContext = {
  token?: string;
};

export const myAuthChecker: AuthChecker<MyContext> = ({ context }) => {
  // 此时context可正常获取token
  return !!context.token;
};

关键说明

Apollo v4的上下文传递逻辑与v3不同,TypeGraphQL需要显式配置透传Apollo的执行上下文,完成配置后,AuthChecker就能正确读取你在Apollo中设置的上下文数据。

内容的提问来源于stack exchange,提问作者Rodrigo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 11:20:36