如何将cookie从服务器发送到另一个端口

时间:2016-09-07 12:30:39

标签: ruby-on-rails cookies cors port webpack-dev-server

我有一个后端服务器(由Rails提供支持),其API由在Node简单开发服务器上运行的HTML5前端使用。

两者都在同一台主机上:我的机器。

当我从前端登录到后端时,rails向我发送了会话cookie。我可以在响应头中看到它,问题是浏览器不保存它。

政策是正确的,如果我直接从rails app提供相同的前端,那么Cookie设置正确。

我能看到的唯一区别是,当前端在节点服务器上运行时,它在端口8080上运行,而rails在端口3000上运行。我知道cookie不应该是端口特定的,所以我想念这里发生的事情。

有什么想法?溶液

(我需要能够以这种方式保持设置,以便从Node和后端在不同端口的轨道上提供服务)

1 个答案:

答案 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