使用API​​网关继续在Lambda请求上获取502。请求的资源上不存在“ Access-Control-Allow-Origin”标头

时间:2019-01-20 00:56:37

标签: javascript node.js cors aws-lambda serverless-framework

我使用Serverless构建了一个API网关,而用allowCredentials: true创建的第一条路由将无法工作。

clients-confirmation:
    handler: clients.onConfirmation
    events:
      - http:
          path: clients/on-confirmation
          method: post
          cors:
            origin: 'https://840b1a6d.ngrok.io' # <-- Specify allowed origin
            headers:
              - Content-Type
              - X-Amz-Date
              - Authorization
              - X-Api-Key
              - X-Amz-Security-Token
              - X-Amz-User-Agent
              - Access-Control-Allow-Origin
              - Access-Control-Allow-Credentials
              - Access-Control-Allow-Methods
              - Access-Control-Allow-Headers
            allowCredentials: true
            cacheControl: 'max-age=600, s-maxage=600, proxy-revalidate'
          authorizer: aws_iam

用户已登录,我使用AWS-Amplify Auth.post发布到路由。

我试图将localhost放在ngrok上,以更好地体验真实环境,但是它不起作用。

我的ResponseBuilder提供我认为正确的标题。

export default class ResponseBuilder {
  static create(data, withCredentials = false) {
    return {
      statusCode: 200,
      headers: {
        'Access-Control-Allow-Origin': 'https://840b1a6d.ngrok.io',
        'Access-Control-Allow-Credentials': withCredentials, // true
        'Access-Control-Allow-Headers': 'access-control-allow-origin, Access-Control-Allow-Headers, Access-Control-Allow-Origin, Origin,Accept, Access-Control-Allow-Credentials'
      },
      body: JSON.stringify(data),
      'isBase64Encoded': false,
    };
  }
}

我在每个请求上都使用它。我试图放入ngrok的原点和通配符,但它总是告诉我相同的错误。

关于lambda的响应或应添加到无服务器文件中的设置,我是否不了解?

非常感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

allowCredentials: true无法与'Access-Control-Allow-Origin': '*'一起使用。

您必须明确指定原点:

'Access-Control-Allow-Origin': 'https://840b1a6d.ngrok.io'

还有withCredentials中的'Access-Control-Allow-Credentials': withCredentials
 应该是true