Amplify未认证用户调用Lambda resolver返回自定义类型报Unauthorized错误
Amplify Lambda Resolver返回自定义类型报未授权错误解决方案
问题原因
你虽然对Mutation接口配置了API Key公开访问权限,但Amplify的GraphQL权限校验会对返回结果的每一个自定义类型的字段做权限验证,你没有给返回的自定义类型FormAssessmentResponse配置对应的@auth规则,所以接口执行成功后返回字段时被权限校验拦截,就出现了字段未授权的报错。当你把返回类型换成基础类型(String/AWSJSON)时,基础类型不需要额外配置权限,所以可以正常返回。
解决方案
直接给自定义类型FormAssessmentResponse加上和Mutation对应的@auth规则即可,不需要添加@model注解,不会自动生成DynamoDB表,完全符合你的需求。修改后的schema示例如下:
# 给自定义返回类型添加对应权限规则 type FormAssessmentResponse @auth(rules: [{allow: public, provider: apiKey}]) { score: Int isInCoverageArea: Boolean } ... type Mutation { formAssessment(input: FormAssessmentInput!): FormAssessmentResponse @function(name: "formResolvers-${env}") @auth(rules: [{allow: public, provider: apiKey}]) }
修改完成后执行amplify push重新发布API即可生效。
可选替代方案(不推荐)
如果你需要全局关闭自定义类型的字段权限校验,可以修改项目根目录下的amplify/cli.json文件,将features.graphqltransformer.transformerversion对应的generateGraphQLPermissions参数设置为false,重新发布后也可以解决问题,但该方案会关闭所有自定义类型的默认权限校验,会降低接口安全性,仅适合测试场景使用。
内容的提问来源于stack exchange,提问作者good1492
相关产品推荐
相关产品推荐

