【发布时间】:2013-08-26 09:30:06
【问题描述】:
我在提供 JSON API 的 Rails4 应用程序上使用设计。我修补了设计,因此它通过 HTTP 标头而不是 URL 参数接受身份验证令牌。效果很好。
基于该 API 的 JS 单页应用程序运行良好。我可以对用户进行身份验证,并在应用内请求此用户的资源。
此外,我希望服务器(设计)设置一个 cookie,以便基于 cookie 的身份验证工作,并且我也可以通过非 XHR 请求请求用户私有资源。这不起作用,我不知道为什么。
我有我的设计初始化器:
config.http_authenticatable_on_xhr = true
在我设置的 session_store 初始化程序中:
MyApp::Application.config.session_store :cookie_store, key: '_myapp_session', domain: :all, httponly: false, secure: false
当我在 Chrome 中运行我的单页应用程序并检查网络请求时,我可以看到对服务器端资源请求的每个响应都包含一个 Set-Cookie 标头,如下所示:
HTTP/1.1 200 OK
X-Frame-Options: SAMEORIGIN
X-Xss-Protection: 1; mode=block
X-Content-Type-Options: nosniff
X-Ua-Compatible: chrome=1
Access-Control-Allow-Origin: * //dont give me shelter
Access-Control-Allow-Methods: POST, PUT, GET, OPTIONS, DELETE
Access-Control-Max-Age: 1728000
X-Meta-Request-Version: 0.2.8
Etag: "7b64cd327b9ff8dce6bb8b616aeee2b8"
Cache-Control: max-age=0, private, must-revalidate
X-Request-Id: 1d6be45e-ce45-40fd-b03b-358644826955
X-Runtime: 0.283514
Server: WEBrick/1.3.1 (Ruby/2.0.0/2013-06-27)
Date: Fri, 23 Aug 2013 10:36:04 GMT
Connection: Keep-Alive
Set-Cookie: _myapp_session=NndJcUd5QUJmRktkSkdTVTk1NTF3UHVKaW85QkVmTmpqZEM4Q3BqUW5ORzNyNG5HWmlnSWc5Yy83Nk16c3Q0dk1iVXQ0Q2JqTE1qZWZoaDgxNW1RQnErOHhsVG9rdEQ4cU1CNGsyNWsrVlk0OXlLRGo5c1BiN3NkdFlRdWJHVXBDamI1U1BrdlQ3Mmw3OWNZVWJkWGI1UWZqNDJ1VldxL0xvYkkwYVd5aHBYaU5sOElkZ3NSRXZVdGxlWHQxY1FteFh1OGU3NHowYU0xYTRLK2xuTEN4KzhzR2pjR25YWlZVSTZtZDkvUnZXbz0tLXJKMXNlV1gvcHFuaG5jU3YvNUJhSnc9PQ%3D%3D--5ecf40e2a678b467b77aa0c56494be8e079641d2; domain=.myapp.dev; path=/
我的应用程序从端口 9000 上的 app.myapp.dev 提供服务,并在端口 3000 上的 api.myapp.dev 处请求 API。由于正确的 CORS 配置,这可以正常工作。
如果我查看Cookies 下的 Chrome 资源面板,则没有设置 cookie。由于没有 cookie,对 api.myapp.net 的每个非 XHR 请求都不会对用户进行身份验证。
我不明白,为什么cookie set header看起来很好,但是cookie没有设置?
谁能赐教?
问候 费利克斯
【问题讨论】:
标签: ruby-on-rails cookies devise xmlhttprequest ruby-on-rails-4