Express Cookie-当SameSite设置为'None'且Secure设置为true时,会话不保存Cookie [英] Express cookie-session not saving cookie when SameSite is set to 'none' and secure is set to true

查看:35
本文介绍了Express Cookie-当SameSite设置为'None'且Secure设置为true时,会话不保存Cookie的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用cookie-session和passportjs在我的Express应用程序中对用户进行身份验证。当我像这样初始化我的cookieSession时:

app.use(cookieSession({
    maxAge: 24 * 60 * 60 * 1000,
    keys: ['key1']
}));

我的Cookie已成功保存到客户端。但是,我正在处理的项目需要跨站点请求。因此,Cookie的安全属性必须设置为true,SameSite属性必须设置为None。在文档中,可以按如下方式设置这些值:

app.use(cookieSession({
    maxAge: 24 * 60 * 60 * 1000,
    secure: true,
    sameSite: 'none',
    keys: ['key1']
}));
但是,当我这样做时,cookie无法保存到客户端。我想知道是否有人知道如何修复此问题,或者为什么会发生此情况?

提前感谢您。

推荐答案

answer by Luka Darsalia向我显示,至少在我的情况下,服务器拒绝向客户端发送secure:truecookie,因为它认为客户端不安全(因为request.protocolhttp而不是https)。

起初我对此感到困惑,因为我的地址栏显示https。但随后我想起,https仅用于我的浏览器与Cloudflare CDN之间的连接--Cloudflare CDN与我的实际服务器之间的连接仍在使用http

因此,要修复它,我只需确保cookie-session(更具体地说,cookies包中的this line)连接是安全的,从而继续发送带有secure:true标志的cookie。

为此,我只需在cookieSession中间件之后添加以下中间件:

// your existing cookieSession init here
app.use(cookieSession({
    [...]
    secure: true,
    sameSite: "none",
}));

// enable the "secure" flag on the sessionCookies object
app.use((req, res, next)=>{
    req["sessionCookies"].secure = true;
    next();
});

这篇关于Express Cookie-当SameSite设置为'None'且Secure设置为true时,会话不保存Cookie的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆