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

KeystoneJS 6未授权用户可查询受认证保护数据问题排查

问题原因与解决方案

核心问题在于:withAuth仅启用了Keystone的认证系统(比如登录流程、session管理),但不会自动为你的业务数据列表(比如Post)添加访问控制规则。

KeystoneJS 6的默认行为是:如果某个数据列表(List)没有配置access属性,所有操作(包括查询、创建、修改、删除)对未认证用户都是开放的。你看到管理界面需要登录,是因为withAuth自动给管理后台加了认证保护,但GraphQL API的权限需要手动为每个列表配置。

解决方法

你需要在定义Post列表的代码里添加access规则,限制未认证用户的访问权限。示例如下:

// 假设你的lists定义在lists.ts这类文件中
import { list, text } from '@keystone-6/core/fields';

export const lists = {
  Post: list({
    fields: {
      title: text({ validation: { isRequired: true } }),
      // 其他字段配置...
    },
    // 添加访问控制规则
    access: {
      // 仅允许已认证用户读取帖子
      read: ({ session }) => !!session,
      // 同时限制创建、修改、删除操作
      create: ({ session }) => !!session,
      update: ({ session }) => !!session,
      delete: ({ session }) => !!session,
    },
  }),
  User: list({
    // User列表的原有配置...
  }),
};

配置完成后,未认证用户再查询Post数据时会收到权限错误,必须先通过AuthenticateUserWithPassword mutation获取sessionToken,并在请求中携带(通过请求头或cookie)才能访问数据。

需要明确:withAuth的配置只负责认证相关逻辑,和数据访问控制是两个独立模块,必须手动为每个业务列表配置access规则才能实现数据保护。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.11 21:42:17