ReactNative/Expo应用中AWS Amplify POST请求403错误排查求助
确认授权用户身份及排查403错误的方法
一、确认你是否被视为授权用户
打印完整会话信息验证登录状态
在代码中添加会话详情打印,确认是否获取到有效认证会话:const enterData = async () => { try { const session = await Auth.currentSession(); console.log('当前认证会话:', session); console.log('ID Token 内容:', session.getIdToken().payload); // 后续API请求代码 } catch (err) { console.log('获取会话失败:', err); } };查看输出的
payload:如果包含cognito:username、未过期的exp(过期时间戳)、与你的Cognito用户池匹配的iss,说明你是已认证用户。验证Amplify Auth配置正确性
打开src/aws-exports.js,检查aws_user_pools_id、aws_user_pools_web_client_id是否与AWS控制台中你的Cognito用户池信息完全一致,配置错误会导致认证会话不被API认可。
二、排查403错误的常见原因
移除手动添加的Authorization头
Amplify的API模块会自动为已登录用户添加Authorization头,手动添加可能导致格式冲突或重复。修改enterData函数,删除自定义headers:const enterData = async () => { try { const result = await API.post("API", "/", { body: { dateID: "testing" } }); console.log('请求成功:', result); } catch (err) { console.log('请求错误:', err); } };检查REST API的权限配置
登录AWS控制台,进入API Gateway:- 找到你的REST API,查看目标资源(比如
/)的POST方法,确认授权类型是Cognito用户池,且关联的用户池与你的Amplify配置一致。 - 检查API集成的Lambda角色(如果是Lambda代理到DynamoDB),确保该角色拥有
dynamodb:PutItem权限,否则即使用户认证通过,Lambda也无法写入数据,会返回403。
- 找到你的REST API,查看目标资源(比如
确认API名称和资源路径正确
API.post的第一个参数是API的名称,必须与aws-exports.js中aws_cloud_logic_custom数组里的name字段完全匹配;第二个参数是资源路径,要与你在API Gateway中创建的资源路径一致(比如如果创建的是/items,就不能写/)。检查用户所属用户组(若有配置)
如果API权限是基于Cognito用户组设置的,需确认你的测试用户是否属于拥有POST权限的用户组,可在Cognito用户池的「用户和组」页面查看用户分组。
内容的提问来源于stack exchange,提问作者benwl
相关产品推荐
相关产品推荐

