You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GraphQL API本地正常但部署至AWS后无法读取Post数据求助

解决Amplify GraphQL线上环境无法读取DynamoDB数据的问题

核心问题定位

你的查询代码使用了AMAZON_COGNITO_USER_POOLS认证模式,但线上未登录的公共用户没有Cognito身份凭证,而你在@auth规则里配置的公共可读权限是基于IAM的,两者不匹配,这是导致线上无法读取的关键原因。

分步解决方法

1. 修正查询的认证模式

将查询代码中的authMode改为AWS_IAM,匹配你配置的公共IAM可读规则:

const readBoards = async () => {
    const Boards = await API.graphql({query: listPosts, authMode: 'AWS_IAM'});
    const allBoards = Boards.data.listPosts.items;
    setBoardsItems(allBoards);
};

2. 验证Amplify线上IAM权限

  • 登录AWS控制台,找到Amplify关联的IAM角色(通常命名为amplify-<项目名>-<环境>-<数字>-authRole或unauthRole),检查其策略是否包含DynamoDB的Scan和Query权限(对应listPosts操作)
  • 确认GraphQL API的数据源配置:进入AppSync控制台,找到对应的Post数据源,检查关联的IAM角色是否允许对Post表执行读取操作

3. CORS配置排查

  • 检查Amplify API的CORS设置:在Amplify控制台的API模块中,确认允许的Origin列表包含你的线上站点域名(比如https://your-domain.com)
  • 打开浏览器控制台的Network面板,查看listPosts请求的响应:如果有CORS相关报错(如No 'Access-Control-Allow-Origin' header),需要调整CORS规则,确保线上域名被允许

4. 确认@auth规则部署生效

  • 重新部署你的Amplify API(执行amplify push),确保@auth规则的修改同步到线上
  • 查看AppSync控制台的Resolver权限:检查listPosts resolver的权限是否正确应用了你的@auth规则(同时允许owner和public IAM读取)

本地能运行的原因说明

本地环境中你可能已经登录了Cognito用户(属于Post的owner或符合private规则的用户),此时使用AMAZON_COGNITO_USER_POOLS模式能通过身份验证读取数据;但线上未登录状态下没有用户池身份,必须切换到IAM模式才能匹配公共可读权限。

内容的提问来源于stack exchange,提问作者꼬꾸마시

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 06:00:59