express - API GW Lambda 代理集成 CORS 问题
问题描述
在我的爱好项目网站上的登录请求后尝试发回 cookie。由于某种原因,它在本地运行时工作,即 http://localhost:3000。但是,当我将我的 API 推送到网上并尝试通过我的实时网站访问它时,我在 Application -> Cookies -> website (使用 chrome) 下看不到任何 cookie。我用谷歌搜索了很多,我相信我已经检查了每一个 CORS 政策。
nodeJS 在 AWS lambda 中运行,并通过 API 网关调用。API GW 通过云端分发(如果重要)定向到。
在我的快递后端,我已经相应地记录了我的标题:
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;
据我所知,我已经完成了为跨源请求设置 cookie 中可以找到的所有内容
这意味着我已经双重检查了我的 cors 设置,从打印语句来看,它看起来像是正在发送 cookie。但是为什么浏览器不接呢?
如果有帮助,可以发布实际的站点和 github repo,我已经被困在这里了。
更新
我查看了浏览器中的响应标头,并将其与后端 api 中的标头进行了比较。从该比较中,我可以看到我的“set-cookie”标头未包含在响应中,即使我可以清楚地看到它包含在来自后端的响应中:
更新 2
我相信经过进一步调查,我已将其缩小为 AWS API Gateway 的 CORS 问题。我调查了这些,但仍然没有运气。
如何使用 lambda 代理集成激活将 CORS 标头添加到 AWS API Gateway 响应
在 express 框架发送响应之前来自 lambda cloudwatch 的日志以及来自 API 网关的 cloudwatch 日志(响应标头)。
响应标头的 API GW cloudwatch 日志:
express框架发送的响应对象的Lambda cloudwatch日志:
解决方案
事实证明这不是 CORS 问题。我只是忘记从我的云端分发中转发 cookie。
推荐阅读
- java - 在 kotlin 中随时间操作的最佳方式是什么?
- button - Highcharts 在图表中重绘系列
- javascript - ajax + django,点击按钮随机
- java - 基于具有 java.time API 的 Locale 以正确顺序排列的工作日
- spring-boot - 关系 jv_commit 已经存在
- node.js - 猫鼬需要真正的 req.body.name {}
- java - 为 Web 开发做出反应而不是替代方案
- ruby-on-rails - Rails,Postgres:dyld:惰性符号绑定失败:找不到符号:_PQresultMemorySize
- python - 损失在迭代中不断增加
- sql - Azure SQL 数据同步初始同步不起作用