通过CORS策略阻止从源“ http:// localhost:3000”访问$ AWS_LAMBDA_SITE处的访存

时间:2018-11-08 07:19:14

标签: amazon-web-services cors aws-lambda single-page-application

使用ExpressJ和ClaudiaJ,我已将Web服务器发布到AWS Lambda。该服务器的工作是处理Stripe付款。我正在尝试让我的React SPA从客户端提交Stripe结帐,但是在尝试提交时收到CORS错误。

如何避免此CORS错误?我想我需要在同一TLD上发布客户端和AWS服务器(不确定如何使之工作),或者我需要在服务器上禁用CORS(但这似乎是不安全的)。

条带化服务器调用:

    this.handler = StripeCheckout.configure({
        key: test_key,
        locale: "auto",
        mode: "no-cors",
        name: "Company 1234",
        description: "donation",
        token: token => {
            // Send the donation to your server
            console.log("server pinged");

            fetch(`${backendUrl}/charge`, {
                method: "POST",
                headers: {
                    "Content-Type": "application/json"
                },
                body: JSON.stringify({
                    stripeToken: token,
                    chargeAmount: this.state.donationAmount
                })
            })
                .then(res => res.json())
                .then(json => {
                    console.log("response is " + json);
                    this.setState({ donationResponse: "Thank you for donating!" });
                })
                .catch(error => {
                    this.setState({
                        donationResponse:
                            "There was an issue processing your request. Please try again later"
                    });
                });
        }
    });

提交表单

formSubmit = async event => {
    console.log("form submitted");
    event.preventDefault();

    const amount = this.state.donationAmount * 100; // Needs to be an integer in cents
    this.handler.open({
        amount: Math.round(amount)
    });
};

1 个答案:

答案 0 :(得分:2)

您可以在本地应用程序的请求中传递起点标头。而且,作为AWS lambda的响应,您可以在下面添加响应标题:

YYYY-MM-DD HH:mm

在lambda环境变量中,您可以配置允许的来源列表,并以逗号(,)分隔,以确保仅合法域可以访问。如下所示:

headers :{
    "access-control-allow-origin": "localhost",
    "access-control-allow-credentials": "true"
}

CORS问题实际上与浏览器阻止对其他域的请求有关,可以通过添加上述标头来解决。

我也遇到过类似的问题,我们的请求是通过apigateway-lambda路由的。