我正在try 遵循Amplify文档,通过未经验证的请求公开GraphQLMutations .从文件上看,这似乎应该是可能的.
从CLI docs人开始:
您还可以覆盖授权提供程序.在该示例中 下面,IAM被指定为提供者,它允许您使用 公共的Cognito身份池中的"未经身份验证的角色" 访问,而不是API密钥.当您运行Amplify Add Auth时, Amplify CLI为以下对象生成范围缩小的IAM策略 Cognito身份池中的"未验证角色"自动.
从Library docs人开始:
使用AWS_IAM进行公共API访问时,未经身份验证的登录帐户必须 被启用.要启用未经身份验证的登录,请运行Amplify UPDATE auth 从命令行中, Select 演练所有身份验证 构形
我遵循了以下步骤,在API上启用了未经身份验证的角色(我可以看到,未经身份验证的角色已在IAM中创建).以下是我试图公开曝光的行动:
type Mutation {
submitResponseMessage(message: String!): String!
@function(name: "myFunc-${env}")
@auth(rules: [{ allow: public, provider: iam }])
}
我可以使用IAM身份验证通过AppSync控制台成功测试这个Mutations 操作,我注意到"Authorization"请求标头包括类似"Credential="、"SignedHeaders="和"Signature="之类的内容.
然而,在我的Reaction应用程序中,我正在执行以下操作:
const response = await API.graphql(
graphqlOperation(
submitResponseMessage,
{message: "hello"},
'AWS_IAM'))
它在浏览器控制台中给出了这个错误:
error submitting response Error: No current user
at GraphQLAPIClass.<anonymous> (GraphQLAPI.ts:177:1)
at step (tslib.es6.js:100:1)
at Object.throw (tslib.es6.js:81:1)
at rejected (tslib.es6.js:72:1)
我是不是漏掉了一步?我的Reaction应用程序具有未经身份验证的用户应该能够通过IAM调用此操作,这一理解正确吗?