即使在设置sameSite:'none'和secure:对于MERN Stack Web应用程序为true后,Cookie也不会保存在chrome中

问题描述

在chrome中进行最新更新后,浏览器未保存我的服务器cookie。以前,即使它显示了警告,它仍在工作。但现在不是。

由于我的react应用程序托管在netlify上,并且我的服务器运行在AWS上,因此它是跨源的。因此,我通过sameSite=None secure选项在快速会话中更改了cookie设置,如下所示。

app.use(session({
secret: 'my secret',name: 'my-react-app',resave: false,saveUninitialized: true,cookie: {
  secure: true,sameSite: 'none',maxAge: 24 * 60 * 60 * 1000,httpOnly: true
}
}));

设置secure: true后,它甚至无法在Firefox中使用。该网站通过https提供。我已经尝试了这些参数的几乎所有组合。我有什么想念的吗?任何帮助将不胜感激。

解决方法

我终于找到了解决方法。

实际上,这与快速会话设置没有什么关系,我在其中花费了很多时间。其背后的主要原因是配置错误的反向代理。就我而言,反向代理与应用程序服务器之间的连接不是https。因此,不会应用cookie中的安全标志,从而导致将sameSite选项设置为默认的“ lax”值。而且,这就是为什么我的Cookie在跨域请求中被拒绝的原因。

要解决此问题,我必须在代理标头中设置X-Forwarded-Proto

打开反向代理配置文件

sudo nano /etc/nginx/conf.d/sysmon.conf

以我为例,并添加以下行。

proxy_set_header X-Forwarded-Proto $scheme;

这将通过https转发请求。

您还需要在express中设置“信任代理”。

var app = express()
app.set('trust proxy',1) // trust first proxy