使用Neo4j和GraphQL创建节点时如何将$jwt.sub绑定到externalId属性
问题原因
你对@auth指令的bind参数功能理解有误,这个参数仅做权限校验,不会自动为字段赋值:
- 你配置的规则要求
CREATE/UPDATE操作时,Person的externalId必须等于JWT中的sub值 - 你提交的mutation没有传
externalId字段,创建出的节点externalId为null,不满足校验条件,因此抛出FORBIDDEN错误
解决方案
给externalId字段加上@default指令,指定默认值为JWT的sub属性,创建节点时如果没有手动传值,会自动填充该字段:
type Person { id: ID! @id externalId: ID! @default(value: "$jwt.sub") # 新增@default指令,建议同时设为非空避免异常空值 name: String! } extend type Person @auth( rules: [ { operations: [CREATE, UPDATE], bind: { externalId: "$jwt.sub" } } ] )
修改后你原本的mutation不需要调整任何参数即可正常执行,externalId会自动填充为当前登录用户JWT的sub值,同时@auth的校验规则也会正常生效,避免用户手动传入不属于自己的externalId。
内容的提问来源于stack exchange,提问作者ILikeTacos
相关产品推荐
相关产品推荐

