我有一个后端服务器(由Rails提供支持),其API由在Node简单开发服务器上运行的HTML5前端使用。
两者都在同一台主机上:我的机器。
当我从前端登录到后端时,rails向我发送了会话cookie。我可以在响应头中看到它,问题是浏览器不保存它。
政策是正确的,如果我直接从rails app提供相同的前端,那么Cookie设置正确。
我能看到的唯一区别是,当前端在节点服务器上运行时,它在端口8080
上运行,而rails在端口3000
上运行。我知道cookie不应该是端口特定的,所以我想念这里发生的事情。
有什么想法?溶液
(我需要能够以这种方式保持设置,以便从Node和后端在不同端口的轨道上提供服务)
答案 0 :(得分:3)
您确定Cookie与端口无关,并且浏览器会将相同的Cookie发送到myapp.local:3000作为myapp.local:8080 - ,但不是通过XMLHttpRequest ( aka,AJAX)在进行跨站点请求(CORS)时。
通过在任何XMLHttpRequest对象上将withCredentials
设置为true
,可以告知请求包含cookie和auth标头。请参阅:https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/withCredentials
此外,由于您在问题中标记了webpack-dev-server,因此您可能有兴趣通过webpack-dev-server代理对Rails API的请求,以避免首先出现任何CORS问题。这是在你的weback.config中完成的:
proxy: {
'/some/path': {
target: 'https://other-server.example.com',
secure: false
}
}
请参阅:https://webpack.github.io/docs/webpack-dev-server.html#proxy