node.js - Express.js 会话 cookie 不适用于 CloudFront 中的 secure=true
问题描述
为了让我的 webapp 准备好投入生产,我想将会话 cookie 属性“安全”从 false 设置为 true。该应用程序由 Aws 托管,构建如下:
Route53 -> CloudFront -> ELB(无集群,只有 SingleApp)
CloudFront 用于使应用程序可以通过 SSL 访问。Nodejs 应用程序侦听 HTTP 端口。不幸的是,没有设置 SessionCookie。
如果我将安全设置为 false,则登录有效并且会话 cookie 已设置。所以它似乎只取决于这个属性。我还将“信任代理”设置为 true,但不幸的是没有成功。
Express.js:
const ExpressApp=express();
ExpressApp.set("trust proxy", (ip)=>{
return true;
});
...
会议:
const expiryDate = new Date( Date.now() + 60 * 60 * 1000 ); // 1 hour
return session({
genid: (req) => {
return uuid() // use UUIDs for session IDs
},
secret: process.env.SESSION_SECRET,
resave: false,
saveUninitialized: true,
proxy:true,
store: new MongoStore({ mongooseConnection: mongoose.connection }),
rolling: true,
cookie:{
secure:true,
httpOnly:true,
expires: expiryDate
}
})
CloudFront: https ://pasteboard.co/Ib9mTED.png
解决方案
推荐阅读
- networking - 查看 wlan0 设备是否忙
- grafana - Influxdb GroupBy 时间使用预定义的时间间隔,并且不以第一个时间戳开始
- laravel - snappy pdf 生成中 %pdf 之前的空格
- xml - Oracle XML - 向标签名称添加额外的文本
- docker - 通过 CLI 命令配置 dockerized Keycloak
- webpack - Webpack 5 插件:模块错误没有代码生成条目
- chromium - 如何在 windows 的 chromium 浏览器中构建组件扩展?
- python - 我正在使用'beeware'。使用公文包创建 android 时出现以下权限错误
- php - 如何进行 AWS SNS 确认
- javascript - 子函数内的函数错误处理的正确方法是什么?