繁体   English   中英

Express JS/Node JS:当secure=true,sameSite:'none'时,浏览器没有设置cookie

[英]Express JS/ Node JS : Browsers are not setting cookie when secure=true, sameSite: 'none'

如果我在本地运行服务器,它会设置 cookie,但是当它在线托管时:

  1. 如果secure=false, sameSite: 'none'然后我收到以下错误

Cookie“connect.sid”将很快被拒绝,因为它的“sameSite”属性设置为“none”或无效值,没有“secure”属性。 要了解有关“sameSite”属性的更多信息,请阅读https://developer.mozilla.org/docs/Web/HTTP/Headers/Set-Cookie/SameSite

然后我尝试使用 secure=true

  1. 如果 secure=true, sameSite: 'none'那么我知道它应该可以工作,

它可以工作,并且在本地托管服务器时设置了 cookies。 但是当它托管在 heroku 中时,cookie 没有设置,我没有收到任何错误。

似乎客户端网站不安全,但它在 url 框中显示 https

我在这里做错了什么?

session 配置:

 router.use( session({ cookie: { secure: true, maxAge: 86400, sameSite: "none", }, secret: process.env.SESSION_SECRET, resave: false, saveUninitialized: false, }) );

note: I have already enabled cors with credentials set to true The cookies tab was empty in the XHR cookies tab Front-end and Back-end are hosted separately in heroku XMLHttpRequest is used to send post request with withCredentials set to true.

XHRPOST https://sih-drs-prototype-backend-2.herokuapp.com/api/outrages/login [HTTP/1.1 200 OK 1625ms]

POST https://sih-drs-prototype-backend-2.herokuapp.com/api/outrages/login Status200 OK VersionHTTP/1.1 Transferred367 B (2 B size)

Access-Control-Allow-Credentials
    true
Access-Control-Allow-Origin
    https://tempautocomplete.herokuapp.com
Connection
    keep-alive
Content-Length
    2
Content-Type
    application/json; charset=utf-8
Date
    Sun, 12 Jul 2020 14:06:42 GMT
Etag
    W/"2-vyGp6PvFo4RvsFtPoIWeCReyIC8"
Server
    Cowboy
Vary
    Origin
Via
    1.1 vegur
X-Powered-By
    Express
    
Accept
    */*
Accept-Encoding
    gzip, deflate, br
Accept-Language
    en-US,en;q=0.5
Connection
    keep-alive
Content-Length
    46
Content-Type
    application/json;charset=UTF-8
Host
    sih-drs-prototype-backend-2.herokuapp.com
Origin
    https://tempautocomplete.herokuapp.com
Referer
    https://tempautocomplete.herokuapp.com/static/
User-Agent
    Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101 Firefox/78.0

问题不在于表达会话,它完成了它的工作。 当响应来自第三方域时,浏览器不允许 cookies。


如果您正在寻找解决方法,请尝试此 npm package: should-send-same-site-none Z5E056C500A1C4B6A7110B50D807BADEnones/package/package/package


需要明确的是,浏览器不会拒绝 cookies。 相反,cookies 存储在发送响应的第 3 方域名的名称中。

在本地托管时它工作得很好,因为请求和响应将来自同一个域(本地主机)

原始问题中发布的设置是可以的,因为 Heroku 可能正在使用代理,所以只缺少一件事。 我遇到了同样的问题,当我添加时:

app.set('trust proxy', 1);

Set-Cookie header 最终从托管在 Heroku 上的 Express 服务器发送到浏览器。

暂无
暂无

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

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