使用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)
});
};
答案 0 :(得分:2)
您可以在本地应用程序的请求中传递起点标头。而且,作为AWS lambda的响应,您可以在下面添加响应标题:
YYYY-MM-DD HH:mm
在lambda环境变量中,您可以配置允许的来源列表,并以逗号(,)分隔,以确保仅合法域可以访问。如下所示:
headers :{
"access-control-allow-origin": "localhost",
"access-control-allow-credentials": "true"
}
CORS问题实际上与浏览器阻止对其他域的请求有关,可以通过添加上述标头来解决。
我也遇到过类似的问题,我们的请求是通过apigateway-lambda路由的。