我正在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调用此操作,这一理解正确吗?

推荐答案

仔细查看这些文档,我的代码是这样做的:

const response = await API.graphql(
   graphqlOperation(
      submitResponseMessage,
      {message: "hello"},
      'AWS_IAM'))

但事情本该是这样的:

const response = await API.graphql({
   query: submitResponseMessage,
   variables: {message: "hello"},
   authMode: 'AWS_IAM'}) 

这解决了问题. 我甚至不知道我从哪里得到的原始代码..可能来自副驾驶?

Reactjs相关问答推荐

从另一个组件更改组件中const的状态

404使用GitHub操作部署Next.js应用程序时出错

在Reaction中单击并显示子组件延迟/动画

在REACT-RUTER-DOMV6中使用通用页面包装组件有问题吗?

Reaction-路由-DOM v6与v5

关于forwardRef,我可以';我不理解第二个用例

Firebase查询返回随机用户数据,而不是过滤后的用户数据

React Native 背景动画反转

下一个js如何从另一个组件更新组件?

如何在悬停时更改 MUI 卡内容

React js中不记名令牌中的空间问题

使用dayjs时如何在输入类型日期时间本地字段中设置默认值?

MUI - ButtonGroup fullWidth 条件屏幕大小不起作用?

如何保留我的下一个授权用户会话?所以我可以使用提供的 ID 在其他路由中获取数据

react 本机日历

.filter() 函数在删除函数中创建循环 - React

使用 React、Redux 和 Firebase 的无限循环

如果 URL 已随功能组件更改,则取消刷新

找不到元素 - 这是参考问题吗?

单击按钮时获取react 表中每一行的属性