AWS Amplify中Cognito用户可执行Mutations但无法执行Queries问题
解决AWS Amplify GraphQL中Cognito用户无法查询Listing的权限问题
问题原因
你的Listing类型@auth规则存在认证方式不匹配的问题:
- 原规则中
allow: public默认仅对API Key认证生效,而你客户端配置的是AMAZON_COGNITO_USER_POOLS认证,因此登录用户无法触发该规则获取查询权限。 - 增删改操作正常是因为
allow: owner规则基于userId字段匹配,对Cognito用户池认证生效。
解决方案1:添加Cognito认证用户的全局读权限
修改Listing类型的@auth规则,新增针对已认证用户的read权限:
type Listing @model @searchable @auth(rules: [ { allow: authenticated, operations: [read] }, { allow: owner, operations: [create, update, delete], ownerField: "userId" } ]) { id: ID! type: String! rentEstimate: Int! latt : Float!, long : Float!, category: String! description: String! images: [String]! userId: String! }
解决方案2:调整public规则适配Cognito用户池
如果希望保留"公开可读"的逻辑,同时让Cognito登录用户也能触发该规则,可指定provider: userPools:
type Listing @model @searchable @auth(rules: [ { allow: public, operations: [read], provider: userPools }, { allow: owner, operations: [create, update, delete], ownerField: "userId" } ]) { id: ID! type: String! rentEstimate: Int! latt : Float!, long : Float!, category: String! description: String! images: [String]! userId: String! }
部署更新
修改schema后,执行以下命令重新部署API:
amplify push
部署完成后,用Cognito登录用户执行查询即可正常获取数据。
内容的提问来源于stack exchange,提问作者Sultan
相关产品推荐
相关产品推荐

