如何排查AWS Amplify中删除DynamoDB记录的未授权错误?
解决AWS Amplify GraphQL删除记录的权限错误
问题分析
执行deleteImage mutation时遇到"Not Authorized to access deleteImage on type Mutation"错误,核心原因是Amplify的@auth权限规则未匹配当前用户身份,即便你是记录的业务owner。
解决方案
1. 修正Schema的@auth规则(关键)
Amplify默认的owner权限规则会用用户的Cognito Sub(唯一ID)匹配记录的owner字段。如果你的业务逻辑用employerID作为owner标识,必须在@auth规则里明确指定ownerField:
type Image @model @auth( rules: [ { allow: owner, ownerField: "employerID", operations: [create, update, delete, read] } ] )
修改后重新部署,Amplify会用employerID字段验证用户是否有权限操作记录。
2. 简化前端请求参数
删除操作仅需主键id即可,无需传递employerID(除非将其设为复合主键的一部分),简化后的代码:
await API.graphql({ query: deleteImage, variables: { input: { id: fileName } }, authMode: "AMAZON_COGNITO_USER_POOLS", });
3. 验证记录与用户身份的匹配性
登录DynamoDB控制台找到对应Image记录,检查:
- 若用默认
owner字段:确认该字段值等于当前用户的Cognito Sub(可通过Auth.user.attributes.sub获取) - 若指定
ownerField: "employerID":确认该字段值等于Auth.user.attributes["custom:id"]
4. 确认部署生效
即便CI/CD显示部署完成,也建议手动检查AppSync控制台的Schema和Auth规则是否与本地一致,避免部署遗漏。
内容的提问来源于stack exchange,提问作者Luke
相关产品推荐
相关产品推荐

