在Rails 4和Ember中的所有子域上设置cookie

时间:2014-12-17 14:35:24

标签: ruby-on-rails cookies ember.js

我们有一个Rails应用程序,它是api.domain.com上运行的API组件,以及www.domain.com上运行的Ember.js中的前端应用程序。

当Ember.js向API中的路由/events发送POST请求时,我们希望API设置cookie以记住唯一的用户标识符。

因此,事件控制器中的此方法:

def set_tracking_cookie
  cookies[:our_company_distinct] = {
    value: create_identifier,
    expires: 1.year.from_now,
    domain: :all
  }
end

如您所见,Cookie在整个域中设置,并设置为在一年内过期。

关键是下次Ember查询API时,它将能够读取此cookie。但事实并非如此。

每次前端查询API时,API都无法找到cookie,也不会在我的开发人员工具中的cookie中显示。

Ember请求将Access-Control-Allow-Credentials标头设置为true,我可以确认该Cookie确实是在API的响应中发送的,其中包含域,名称,路径,到期日的正确值,等

我错过了什么吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

对于其他任何以这种方式发送/接收cookie的问题,我在调试时发现了一些有用的东西并最终修复了问题:

  • 当您使用Chrome(或任何其他浏览器)devtools时,检查每个请求并检查它是否在您希望它的请求中从API发送cookie发送,如果来自Ember(或其他任何JS框架)的所有后续请求都发送此请求。在Chrome中,转到"网络> [请求]>饼干&#34 ;.确保前端正确发送cookie并确实正确接收它。
  • 我们发现这是向Ember添加CORS cookie支持的最佳方式,就像这样:http://discuss.emberjs.com/t/ember-data-and-cors/3690