express - API GW Lambda 代理集成 CORS 问题

标签 express cookies aws-lambda aws-api-gateway amazon-cloudfront

在我的爱好项目网站上发出登录请求后,尝试发回 cookie。由于某种原因,它在本地运行时有效,即 http://localhost:3000。但是,当我将我的 API 推到网上并尝试通过我的实时网站访问它时,我在应用程序 -> Cookies -> 网站(使用 chrome)下看不到任何 cookie。我在谷歌上搜索了很多,我相信我已经勾选了每一个 CORS 策略。

nodeJS运行在AWS lambda中,通过API网关调用。 API GW 通过云端分发定向到(如果重要的话)。

在我的 express 后端中,我相应地记录了我的 header :

res.cookie('jwt', token, cookieOptions);
console.log('Checking cookie', res);
console.log('Checking cookie', res.cookies);

res.status(statusCode).json({
  status: 'success',
  data: {
    user
  }
});

这部分的输出是这样的:

'access-control-allow-origin': [ 'Access-Control-Allow-Origin', 'https://example.com' ],
 vary: [ 'Vary', 'Origin' ],
 'access-control-allow-credentials': [ 'Access-Control-Allow-Credentials', 'true' ],
 'access-control-allow-methods':
  [ 'Access-Control-Allow-Methods',
    'GET, POST, PUT, PATCH, DELETE, HEAD, OPTIONS' ],
 'access-control-allow-headers':
  [ 'Access-Control-Allow-Headers',
    'Origin, X-Requested-With, Content-Type, Accept, X-PINGOTHER' ],
 'x-ratelimit-limit': [ 'X-RateLimit-Limit', 100 ],
 'x-ratelimit-remaining': [ 'X-RateLimit-Remaining', 97 ],
 date: [ 'Date', 'Fri, 11 Dec 2020 23:20:28 GMT' ],
 'x-ratelimit-reset': [ 'X-RateLimit-Reset', 1607732145 ],
 quizappuserloggedin: [ 'QuizAppUserLoggedIn', 'false' ],
 'set-cookie':
  [ 'Set-Cookie', 'my-cookie'; Path=/; Expires=Sat, 12 Dec 2020 23:20:34 GMT; HttpOnly; Secure'

据我所知,我已经正确设置了 CORS 设置。从我的前端我已经设置:

axios.defaults.withCredentials = true;

据我所知,我已经完成了在 Set cookies for cross origin requests 中可以找到的所有内容

意思是我已经仔细检查了我的 cors 设置,从打印语句来看,cookie 似乎正在发送。但为什么浏览器不接收它?

如果有帮助,可以发布实际站点和 github 存储库,我现在一直被困在这里。

更新

我查看了浏览器中的响应 header ,并将其与后端 api 中的 header 进行了比较。通过比较,我可以看到我的“set-cookie” header 没有包含在响应中,尽管我可以清楚地看到它包含在来自后端的响应中:

enter image description here

更新 2

我相信经过进一步调查后,我已将其缩小为 AWS API Gateway 的 CORS 问题。我调查了这些,但仍然没有运气。

How to add CORS header to AWS API Gateway response with lambda proxy integration activate

Amazon API gateway ignores set-cookie

在 express 框架发送响应之前来自 lambda cloudwatch 的日志以及来自 API 网关的 cloudwatch 日志(响应 header )。

响应 header 的 API GW cloudwatch 日志:

API GW

Express框架发送的响应对象的Lambda cloudwatch日志:

LAMBDA

最佳答案

事实证明这不是 CORS 问题。我只是忘记从我的云端分发转发 cookie。

关于express - API GW Lambda 代理集成 CORS 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65260202/

相关文章:

node.js - 比较 bcrypt 中两个相同的字符串哈希返回未定义

javascript - 获取 sliderstop 上的当前值并设置 cookie

php - AWS 开发工具包 (PHP) : Invoking lambda function asynchronously, 检索状态

amazon-web-services - 我们可以为 EC2 实例分配多个角色吗?

node.js - Stylus 和 Express - 样式表在修改时不会重新编译

javascript - 如何验证 API 调用中参数的存在

asp.net - Facebook API 和 Safari

http - 处理 HTTP cookie 以模拟类似浏览器的行为

python - 用 moto 模拟 lambda 响应

node.js - 使用 ejs View 助手添加字段属性