Amplify API订阅授权失败问题求助
问题解决指南:Cognito授权下的AppSync订阅未授权错误
Cognito用户池完全支持AppSync订阅,你的错误是典型的权限配置缺失或代码细节问题,以下是具体排查和解决步骤:
1. 检查GraphQL Schema的订阅权限规则
确保你的Project类型对应的订阅操作配置了正确的@auth规则,且明确包含subscribe操作。例如:
type Project @model @auth(rules: [ // 根据业务需求选择合适的规则,比如允许认证用户订阅 { allow: private, operations: [read, update, subscribe] }, // 或者仅允许资源所有者订阅 { allow: owner, operations: [read, update, subscribe] } ]) { id: ID! name: String! // 其他字段定义 }
注意:如果
@auth规则的operations数组里没有显式添加subscribe,即使读/写权限正常,订阅也会被拒绝。
2. 重新部署Amplify API
修改Schema后,必须重新推送配置到云端:
amplify push api
部署完成后,确认AppSync控制台的权限规则已同步更新。
3. 核对代码中的订阅操作
你提到需求是"新增条目时触发",但代码里用了onUpdateProject(更新触发),应该替换为onCreateProject(新增触发),避免因操作类型不匹配导致的权限问题:
const subscription = API.graphql({ query: subscriptions.onCreateProject, authMode: "AMAZON_COGNITO_USER_POOLS" }).subscribe({ next: ({ provider, value }) => console.log({ provider, value }), error: error => console.warn(error) });
4. 验证AppSync控制台配置
登录AWS控制台进入AppSync服务,检查以下内容:
- Schema标签:确认
Project类型的@auth规则包含subscribe操作; - Settings标签:确认
Authorization modes已启用Amazon Cognito user pool,且关联的是你的目标用户池; - Subscriptions标签:查看对应订阅字段(如
onCreateProject)的权限是否正确绑定了Cognito授权。
5. 确认用户权限有效性
确保当前登录的Cognito用户满足@auth规则的要求:
- 如果是
owner规则,用户必须是该Project的创建者; - 如果是
private规则,用户必须已通过Cognito认证(你的代码已指定authMode,这部分通常没问题,但可通过Auth.currentAuthenticatedUser()验证用户登录状态)。
内容的提问来源于stack exchange,提问作者Chris Dellinger
相关产品推荐
相关产品推荐

