使用GraphQL Shield时Resolver抛自定义错误却返回未授权错误求助
问题原因
当你在shield配置中没有为Query或Mutation下的字段指定规则时,graphql-shield默认会使用deny规则——权限层会直接拦截请求并返回"Not Authorized",你的Resolver代码根本没机会执行,自然抛不出自定义错误。
解决方案
方案1:全局设置默认规则为allow
修改shield初始化配置,添加fallbackRule: allow,让未指定规则的Resolver默认允许访问:
export const permissions = shield({ Query: {}, Mutation: {}, }, { fallbackRule: allow // 新增全局默认规则 });
方案2:为特定Resolver单独配置allow规则
如果不想全局放开权限,只为目标Mutation指定允许规则:
export const permissions = shield({ Query: {}, Mutation: { testResolver: allow // 为该Mutation单独设置允许规则 }, });
验证效果
修改后调用testResolver,权限层会允许请求进入Resolver逻辑,此时你抛出的自定义错误An error occurred就会正常返回。
内容的提问来源于stack exchange,提问作者user12504353
相关产品推荐
相关产品推荐

