gpt4 book ai didi

aws-lambda - AWS Lambda Set-Cookie header 未在浏览器中设置

转载 作者:行者123 更新时间:2023-12-05 05:45:51 26 4
gpt4 key购买 nike

我正在尝试在我的 aws lambda 函数响应中设置一个 cookie。我没有任何 header 映射,因为我正在使用 lambda 代理与 API 网关集成。 lambda 函数中的响应代码如下所示:

exports.handler = async (event) => {     
const response = {
statusCode: 200,
"multiValueHeaders": {
"Set-Cookie": ["gtgm=6c7729687d5ff1a05f1a5dfb15ce3b8fa3f2b590; path=/; expires=Fri, 13-Feb-2032 13:27:44 GMT; secure; HttpOnly; SameSite=None"]
},
headers: {
"Access-Control-Allow-Origin": "*",
"Access-Control-Allow-Headers": "*",
"Access-Control-Allow-Credentials": true,
},
};
return response;
};

我使用 fiddler 检查响应,我可以在响应中看到“Set-Cookie...”,这让我相信上面的代码是正确的?问题是浏览器只是忽略它并且除了 AWS DNT cookie 之外根本不设置任何 cookie。我不确定还需要检查什么,或者我是否遗漏了 cookie 配置中的任何内容。

这是我的请求的样子:

<Button
onClick={() => {
fetch(
"https:mysupercoolapi.com/cookie-test/",
{
// credentials: "include",
headers: {
"Content-Type": "application/json",
// "Access-Control-Allow-Credentials": "true",
},
}
)
.then((response) => response.json())
.then((data) => {
console.log(data);
});
}}
>
Cookie Test
</Button>

不确定我遗漏了什么或哪里出错了。

最佳答案

我想自己解决这个问题。上面的设置很好,但浏览器要求您正确设置以下内容才能实际设置 cookie:

  • 在请求中:将“credentials”设置为包含。取决于您使用的库(获取将是凭据:“include”)。你可以看到它在我上面的原始帖子中被注释掉了,这是不正确的。
  • 在 Lambda 函数的响应 header 中,您需要设置来源,例如“Access-Control-Allow-Origin”:“http://localhost:3002”。测试后,我将其切换到我的实际域。如果有办法将此设置保留为实际域,但在本地主机上测试时仍然可以正常工作,请告诉我。
  • 在 API 网关中,您需要设置 CORS 值,如下面的屏幕截图所示,以确保预检 (OPTINOS) 调用也正确进行。 enter image description here

关键是正确配置请求和响应 header 。这在使用 AWS 之类的东西时更难做到,但使用 express.js 之类的东西要容易得多,您可以在其中使用中间件。

关于aws-lambda - AWS Lambda Set-Cookie header 未在浏览器中设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71277726/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com