繁体   English   中英

当 SameSite 为 none 时,Express 不会设置 cookie

[英]Express doesn't set-cookie when SameSite is none

我已经阅读了很多其他类似的问题,但我无法解决问题。

我的设置是 Node + Express + PassportJs,一切都在开发中,但我在生产中遇到了问题。

使用以下代码,我看到会话 cookie 在响应中发回,但我也收到一条消息,说它不会被应用,因为SameSite是松散的(默认)并且响应来自另一个站点(前端和后端没有相同的来源)。

app.use( 
    session({ 
        secret: "foo", 
        resave: false, 
        saveUninitialized: false, 
        store: MongoStore.create({ mongoUrl: process.env.MONGO_DB_CONN_STRING! }), 
        cookie: { httpOnly: true }
    }) 
); 

在此处输入图像描述

所以我把它改成这样,以便在生产中指定SameSiteSecure ,但此时,不再设置 cookie!

app.use( 
    session({ 
        secret: "foo", 
        resave: false, 
        saveUninitialized: false, 
        store: MongoStore.create({ mongoUrl: process.env.MONGO_DB_CONN_STRING! }), 
        cookie: isProduction ? { httpOnly: true, sameSite: "none", secure: true } : {}  // <-- only change
    }) 
); 

在此处输入图像描述

可能是什么原因? 我试图通过玩 CORS(没有成功)和其他 100 件事来修复它。 然而,我似乎缺少一些怪癖。

根据您使用什么服务来部署您的 API(netlify、render.com、heroku 其他...),您必须启用代理

 this.app.enable('trust proxy');

它解决了我的问题

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM