【问题标题】:Serverless Framework with AWS cognito generates CORS error带有 AWS cognito 的无服务器框架生成 CORS 错误
【发布时间】:2019-07-15 06:53:51
【问题描述】:

我从 Angular 前端收到此错误消息,但我无权触摸我的 lambda 代码:

`Access to fetch at 'https://testapicd.***.***.com/localization/v1/role' from origin 'https://localization.test.***.***.com' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource. If an opaque response serves your needs, set the request's mode to 'no-cors' to fetch the resource with CORS disabled.`

我到处查看,我的代码中似乎没有错误。我的无服务器代码是

  getrole:
    handler: v1/handler_get_role.get_role
    name: get_role
    events:
      - http:
          path: v1/role
          method: get
          cors: true
          authorizer:
            name: CognitoCSAuthorizer
            type: COGNITO_USER_POOLS
            arn: ${file(config.${self:provider.stage}.json):userpoolarn}

我已经对所有设置进行了三次检查,一切似乎都正确。有什么建议该怎么做吗?该功能在开发环境中有效,但在我将其部署到测试环境时无效。

如果我直接针对 API 尝试使用令牌,那么它也不起作用(但在开发中工作正常)。我什至不再相信这是一个 CORS 问题。我认为 jwt 令牌是错误的。

def get_role(event, context):
    return {
        'statusCode': 200,
        'headers': {
         'Content-Type': 'application/json',
         'Access-Control-Allow-Origin' : '*', # Required for CORS support to work
         'Access-Control-Allow-Credentials': 'true',
        },
        'body': json.dumps("TEST")
     }

【问题讨论】:

    标签: python cors aws-lambda amazon-cognito serverless-framework


    【解决方案1】:

    serverless.yml 中的这一行

    arn: ${file(config.${self:provider.stage}.json):userpoolarn}

    应该是

    arn: ${file(config.${opt:stage}.json):userpoolarn}

    【讨论】:

      【解决方案2】:

      我已经为这个问题苦苦挣扎了几个小时(如果不是几天的话),结果我不仅必须在 serverless.yml 文件上启用 cors,而且还要将响应标头作为属性添加到您从 Lambda 返回的对象中.

      应该这样做:

      const response = {
          statusCode: 200,
          headers: {
            'Access-Control-Allow-Origin': '*',
            'Access-Control-Allow-Credentials': true,
          },
          body: JSON.stringify({
            product: product
          }),
        };
      

      这个article当时救了我的命,我希望它能救你的命!

      【讨论】:

      • 我什至不再相信这是一个 CORS 问题。我认为 jwt 令牌是错误的。
      • 我确实从 Postman 那里尝试过。它不起作用。所以我们同意这不是 CORS 问题?
      • 我们发现了这个错误......它是 API Gateway 测试环境中的授权者指向 dev 用户池并且没有得到更新。我们现在正在修复它...感谢您的帮助。你是对的。
      • 该错误在 serverless.yml 中,我们在其中设置了 provider:stage,它始终为 dev,我可以将其更正为 opt:stage,这取决于 dev 的阶段, testprod。将庆祝这个tonite! :-)
      • 当之无愧!干杯!
      【解决方案3】:

      当您向其他域中的服务器发出请求时,会抛出 CORS error。根据您用于托管 Angular 代码的服务器,您可以通过多种方式解决此问题。

      您可以尝试this google chrome 扩展程序,看看您是否可以通过忽略 CORS 错误来有效地解决问题。

      解决此问题的最常用方法之一是配置proxy server,但您也可以通过将测试域列入白名单来处理请求中的标头Access-Control-Allow-Origin

      【讨论】:

        猜你喜欢
        • 2018-09-13
        • 2020-07-10
        • 2020-09-25
        • 2018-03-19
        • 2021-05-12
        • 2017-08-10
        • 1970-01-01
        • 2019-02-20
        • 1970-01-01
        相关资源
        最近更新 更多