0

我们有一个移动应用程序,未经身份验证的用户应该能够在其中读取数据,并且他们还应该看到项目资源的实时更新。因此,我们启用了对 Project 资源的 graphql 订阅,但是在尝试订阅 Project 更新时我们遇到了未经授权的错误。

我们尝试了以下方法:

aws-amplify文档中: You may disable authorization checks on subscriptions or completely turn off subscriptions as well by specifying either public or off in @model: @model (subscriptions: { level: public }),我们已经尝试过了,但它不起作用。

我们已经设法通过在下面的示例中指定更新来使其工作, { allow: public, provider: iam, operations: [read, update] } 但是我们不想将更新操作的访问权限授予未经授权的用户。

我们的模型项目是这样定义的

type Project
  @model(subscriptions: { level: public })
  @auth(
    rules: [
      {
        allow: private
        provider: userPools
        operations: [read, create, update, delete]
      }
      { allow: public, provider: iam, operations: [read] }
    ]
  ) {

读取是成功的,但是当客户端尝试订阅更新时,我们会得到未经授权的访问并出错。

"errors": [
    {
      "path": [
        "onUpdateProject"
      ],
      "data": null,
      "errorType": "Unauthorized",
      "errorInfo": null,
      "locations": [
        {
          "line": 2,
          "column": 3,
          "sourceName": null
        }
      ],
      "message": "Not Authorized to access onUpdateProject on type Subscription"
    }

是否可以在不允许公众读取操作的情况下订阅更新?

4

1 回答 1

2

更新:

接缝中存在放大 cli 版本的错误3.15.0。当 API 中启用了多重身份验证(如我们的示例中)时,GraphQL Transformer 不会生成所需的身份验证指令来支持我们 API 中的所有身份验证类型。

此问题的解决方法是为 API 创建自定义订阅。

如果您遇到类似问题,请参阅此 GitHub 问题 => https://github.com/aws-amplify/amplify-cli/issues/2715

于 2019-11-13T19:45:43.947 回答