KeystoneJS 6中graphQLSchemaExtension自定义mutation无session问题求助
解决KeystoneJS 6自定义mutation无法获取有效session的问题
以下是针对该问题的排查和解决步骤:
确认自定义resolver中正确获取session
在自定义mutation的resolver里,必须明确从传入的context参数中提取session,不能依赖默认的自动注入逻辑。示例代码如下:const customSchemaExtension = { type: ` type Mutation { customOperation(input: CustomInput!): CustomOutput } `, resolvers: { Mutation: { customOperation: async (_, args, context) => { // 直接从context中获取session const session = context.session; if (!session) { throw new Error('未授权,请先登录'); } // 后续业务逻辑 return { /* 返回结果 */ }; }, }, }, };检查Keystone配置的顺序
确保session配置项在graphQLSchemaExtension之前声明,保证session中间件先于自定义schema加载生效。示例配置结构:export default config({ // 先配置session session: { secret: process.env.SESSION_SECRET!, secure: process.env.NODE_ENV === 'production', sameSite: 'lax', // 若有自定义序列化/反序列化逻辑,确保逻辑正确 serialize: (session) => JSON.stringify(session), deserialize: (str) => JSON.parse(str), }, // 再配置schema扩展 graphQLSchemaExtension: (baseSchema) => ({ ...baseSchema, ...customSchemaExtension, }), // 其他配置项 lists: { /* 你的列表定义 */ }, });验证前端请求的头信息传递
前端调用自定义mutation时,要确保和普通mutation请求一样携带session凭证:- 若使用Cookie-based session,请求时需设置
credentials: 'include'(浏览器端)或withCredentials: true(Axios等库); - 若使用Token-based session,需在请求头中携带
Authorization: Bearer <token>。
- 若使用Cookie-based session,请求时需设置
排查版本兼容性问题
部分早期KeystoneJS 6版本存在schema扩展中session传递的bug,建议升级到最新稳定版:npm update @keystone-6/core
内容的提问来源于stack exchange,提问作者user1189847343
相关产品推荐
相关产品推荐

