如何使用 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
。
我目前在 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
。