如何使用 Neo4j 和 GraphQL 将 Create 上的 `$jwt.sub` 绑定到 属性?

How to bind `$jwt.sub` on Create to property using Neo4j and GraphQL?

我目前在 Apollo 服务器上使用 neo4j 和 graphql。

我有以下类型:

  type Person {
    id: ID! @id
    externalId: ID
    name: String!
  }

  extend type Person
    @auth(
      rules: [
        { operations: [CREATE, UPDATE], bind: { externalId: "$jwt.sub" } }
      ]
    )

当我尝试进行以下更改时:

mutation Mutation($input: [PersonCreateInput!]!) {
  createPeople(input: [
    {
      "name": "abc"
    }
  ]) {
    people {
      name
    }
  }
}

我从 Neo4j 收到一个 FORBIDDEN 错误。

我调试了一下代码,看起来这是要转换成的内容:

CALL {\n' +
      'CREATE (this0:Person)\n' +
      'SET this0.id = randomUUID()\n' +
      'SET this0.name = $this0_name\n' +
      'WITH this0\n' +
      'CALL apoc.util.validate(NOT(this0.externalId IS NOT NULL AND this0.externalId = $this0_auth_bind0_externalId), "@neo4j/graphql/FORBIDDEN", [0])\n' +
      'RETURN this0\n' +
      '}\n' +
      'RETURN \n' +
      'this0 { .name } AS this0',

所以如果我理解正确的话,如果 externalID 为 NULL 并且 externalID 与我的 jwt 子值不同,那么它将抛出异常。

基本上我想要实现的是:

创建person节点时,将externalID值赋给我JWT的sub属性的值

我做错了什么?

我认为双重否定与谓词有些混淆。如果 this0.externalId 为 null 或如果 this0.externalId 不等于 $this0_auth_bind0_externalId 由于 AND 语句和周围的 NOT.

,将抛出异常

因为你在上面创建这个 this0 它永远不会有 this0.externalId,所以这个谓词将永远为真并且总是抛出异常。

我不擅长 GraphQL,但我认为你的突变需要设置 externalId