簡體   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