繁体   English   中英

没有“访问控制允许来源”AWS Lambda

[英]No 'Access-Control-Allow-Origin' AWS Lambda

大家,新年快乐!

所以我有一个 reactJS API 调用,如下所示:

 async function callApi() {

    const requestData = {
      headers: {
        Authorization: token
      }
    }

    if (calledAPI === false) {
      let data = await API
      .get('caresyncauthapi' , '/access', requestData)
      .then(response => {
        let arr = {};
        arr = response.Items;
        setZorgSearchData(arr)
      })
    }
    calledAPI = true;
  }

它调用的 Lambda 如下所示:

exports.handler = async (event) => {
    if (event.requestContext.authorizer) {
        const claims = event.requestContext.authorizer.claims;
        username = claims['cognito:username'];
      
    }

    var params = {
        TableName: tableName, 
        IndexName: "ZorgverlenerID-index",
        KeyConditionExpression: "#ZorgverlenerID = :zorg_id",
        ExpressionAttributeNames: {
          "#ZorgverlenerID": "ZorgverlenerID"
        },
        ExpressionAttributeValues: { 
          ":zorg_id": username
        }
    };


  
    try {
        data = await dynamodb.query(params).promise();
        console.log( "Status code : 200"); 
        console.log(data.Items);

        let response = 
        {
            statusCode: 200,
            headers: {
                 'Access-Control-Allow-Origin': '*',
                 'Access-Control-Allow-Headers': '*',
             }, 
            body: JSON.stringify(data.Items)
        }
        return JSON.stringify(response);

    } catch (error){
        console.log( "Status code : 400, Error code : ", error.stack);
    }

     
    


};

基本上 Lambda 从发送的令牌(登录者的用户名)中获取上下文。 然后它使用这个用户名查询这个数据库,然后将结果放入 json 并返回。 await dynamodb.query(params).promise(); 给我一个 200(成功),它还打印了我想在 cloudwatch 中返回的正确数据。 但是当数据返回到我的 ReactJS 应用程序时,我收到:

Access to XMLHttpRequest at 'https://qcesrr2td3.execute-api.eu-west-1.amazonaws.com/devl/access' from origin 'http://localhost:3000' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
xhr.js:187 GET https://qcesrr2td3.execute-api.eu-west-1.amazonaws.com/devl/access net::ERR_FAILED 502
dispatchXhrRequest @ xhr.js:187
xhrAdapter @ xhr.js:13

我已经尝试过的事情:

  • 在 API 网关中启用 CORS
  • 更改响应中的标头
  • 返回没有 JSON.stringify 的响应,其 null 然后

有人知道我还能改变什么吗?

通过不将我的响应字符串化来修复它:

try {
        data = await dynamodb.query(params).promise();
        console.log( "Status code : 200"); 
        console.log(data.Items);

        let response = 
        {
            statusCode: 200,
            headers: {
                "Access-Control-Allow-Headers": "*",
                "Access-Control-Allow-Origin": "*",
                "Access-Control-Allow-Methods" : "OPTIONS,POST,GET,PUT"
             }, 
            body: JSON.stringify(data)
        }

        return response;

    } catch (error){
        console.log( "Status code : 400, Error code : ", error.stack);
    }

很奇怪,因为这段代码工作了一周,然后突然停止了。 哦,好吧,它又可以工作了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM