Graphql 无法在类型“用户”图形QL上查询字段“密码”

Graphql 无法在类型“用户”图形QL上查询字段“密码”,graphql,schema,react-apollo,prisma,Graphql,Schema,React Apollo,Prisma,我用的是graphql和prisma datamodel.prisma schema.graphql 分解器 我希望获得用户列表,但收到错误: 质疑 错误 无法查询类型“用户”上的字段“密码”。第7行第5列:\n密码\n^ 更新1 试图使用片段,但得到相同的结果: { users { ...userFields } } fragment userFields on User { email } 。。。啊,普里斯玛 我不知道是否支持接口、联合或输入类型。图形ql Prism

我用的是graphql和prisma

datamodel.prisma

schema.graphql

分解器

我希望获得用户列表,但收到错误: 质疑

错误

无法查询类型“用户”上的字段“密码”。第7行第5列:\n密码\n^

更新1 试图使用片段,但得到相同的结果:

{
  users {
    ...userFields
  }
}

fragment userFields on User {
  email
}
。。。啊,普里斯玛

我不知道是否支持接口、联合或输入类型。图形ql

Prisma几乎可以生成所有东西。。。但是,在不使用所有字段的情况下,将密码定义为datamodel DBB生成所需的类型不应阻止查询在现有模型上定义的类型子集或类型

对我来说,这是一个有点误导错误信息。它可以与解析器相关

尝试在解析器中匹配类型,不要返回直接prisma查询操作对模型类型进行操作,而是将查询的数据映射到一个数组,以过滤出密码字段/属性,使其与查询类型兼容。这也是一个安全问题-密码不应从外部读取。

。。。啊,普里斯玛

我不知道是否支持接口、联合或输入类型。图形ql

Prisma几乎可以生成所有东西。。。但是,在不使用所有字段的情况下,将密码定义为datamodel DBB生成所需的类型不应阻止查询在现有模型上定义的类型子集或类型

对我来说,这是一个有点误导错误信息。它可以与解析器相关


尝试在解析器中匹配类型,不要返回直接prisma查询操作对模型类型进行操作,而是将查询的数据映射到一个数组,以过滤出密码字段/属性,使其与查询类型兼容。这是一个安全问题,太-密码不应该从外部读取。

我创建了自定义查询,它返回一个片段,错误似乎消失了。

我创建了自定义查询,它返回一个片段,错误似乎消失了。

我还想添加一个场景,它可以很容易地导致同样的问题,我花了一段时间进行调试,我相信其他人也会这样做因为我花了相当长的时间才意识到这个问题实际上是由我定义auth相关突变的前端代码引起的

设置 以下是在开发我的大部分应用程序时的情况:

为了简单起见,我省略了一些字段

type User {
  id: ID! @id
  name: String!
  email: String! @unique
  password: String!
}
为了简单起见,schema.graphql只显示注册变异

type Mutation {
  signUp(email: String!, password: String!, name: String!): User!
}
在SignUp.js中,我访问schema.graphql中公开的注册突变

请注意,我正在返回id、电子邮件、姓名和密码——这是因为我想确保开发过程中一切正常

在“用户”类型上引入无法查询字段“密码”错误 一旦我开始研究安全性,并在schema.graphql中创建了一个特殊的用户类型,以便可以隐藏受保护的字段(如密码),我就遇到了这个问题:

请注意,我现在没有公开这个面向前端的用户类型上的密码字段

type Mutation {
  signUp(email: String!, password: String!, name: String!): User!
}

type User {
  id: ID!
  name: String!
  email: String!
}
解决方案 由于这个错误消息的性质,我花了上午的大部分时间对后端代码感到困惑。但事实证明,这个错误实际上是在SignUp.js中引起的,我在那里返回密码字段

解决方案是简单地从返回字段列表中删除该行,如下所示:

const SIGNUP_MUTATION = gql`
  mutation SIGNUP_MUTATION(
    $email: String!
    $name: String!
    $password: String!
  ) {
    signUp(email: $email, name: $name, password: $password) {
      id
      email
      name
    }
  }
`
关键教训 因此,如果您遇到此问题,请检查所有相关的突变,并确保您没有返回我在这里描述的任何受保护的字段

请确保还检查前端代码,并确保您没有尝试返回您现在已保护的字段,并且不再向前端公开这些字段


我希望这是有益的,并节省一些时间的人

我还想添加一个场景,该场景很容易导致我花了一段时间进行调试,我相信其他人也会遇到同样的问题,因为我花了相当长的时间才意识到这个问题实际上是在我定义身份验证相关突变的前端代码中造成的

设置 以下是在开发我的大部分应用程序时的情况:

为了简单起见,我省略了一些字段

type User {
  id: ID! @id
  name: String!
  email: String! @unique
  password: String!
}
为了简单起见,schema.graphql只显示注册变异

type Mutation {
  signUp(email: String!, password: String!, name: String!): User!
}
在SignUp.js中,我访问schema.graphql中公开的注册突变

请注意,我正在返回id、电子邮件、姓名和密码——这是因为我想确保开发过程中一切正常

在“用户”类型上引入无法查询字段“密码”错误 一旦我开始研究安全性,并在schema.graphql中创建了一个特殊的用户类型,以便可以隐藏受保护的字段(如密码),我就遇到了这个问题:

请注意,我现在没有公开这个面向前端的用户类型上的密码字段

type Mutation {
  signUp(email: String!, password: String!, name: String!): User!
}

type User {
  id: ID!
  name: String!
  email: String!
}
解决方案 由于这个错误消息的性质,我花了上午的大部分时间对后端代码感到困惑。但事实证明,错误是 这实际上是在SignUp.js中引起的,我在那里返回密码字段

解决方案是简单地从返回字段列表中删除该行,如下所示:

const SIGNUP_MUTATION = gql`
  mutation SIGNUP_MUTATION(
    $email: String!
    $name: String!
    $password: String!
  ) {
    signUp(email: $email, name: $name, password: $password) {
      id
      email
      name
    }
  }
`
关键教训 因此,如果您遇到此问题,请检查所有相关的突变,并确保您没有返回我在这里描述的任何受保护的字段

请确保还检查前端代码,并确保您没有尝试返回您现在已保护的字段,并且不再向前端公开这些字段


我希望这是有益的,并节省一些时间的人

只需在您的控制台prisma文件夹中运行:

PRISMA_MANAGEMENT_API_SECRET=mysecret42 prisma deploy

只需在您的consolein prisma文件夹中运行:

PRISMA_MANAGEMENT_API_SECRET=mysecret42 prisma deploy

当我删除密码字段时-一切正常,但我需要此字段用于用户创建。使用fragments@xadm用户{email}上的相同{users{…userFields}}片段userFields。。。将用户类型克隆到UserInput中,以便进行变异/创建使用,从用户中删除密码type@xadm你能提供一些小例子吗?当我删除密码字段时-一切正常,但我需要这个字段用于用户创建。使用fragments@xadm用户{email}上的相同{users{…userFields}}片段userFields。。。将用户类型克隆到UserInput中,以便进行变异/创建使用,从用户中删除密码type@xadm你能提供一些小例子吗?是的,我创建了自定义查询,它返回一个片段,错误似乎消失了。是的,我创建了自定义查询,它返回一个片段,错误似乎消失了。