Rao*_*rma 6 ruby cookies ruby-on-rails actiondispatch rack-cors
我有一个仅限 Rails 5 API 的应用程序,想要在 JSON 请求的响应中发送 cookie。当我使用 ActionDispatch::Cookies 在请求的响应中设置 cookie 时,它不会Set-Cookie在响应中设置标头。虽然response.set_cookie确实有效。
我还在应用程序控制器中进行了钩子测试after_action,我看到Set-Cookieheader 不存在于 response.headers 中,但存在 cookies['name_of_cookie'] 。我还想问的一个问题是这些 cookie(ActionDispatch::Cookies) 何时设置响应头?它发生在机架中吗?
withCredentialsAccess-Control-Allow-Credentials: true和Access-Control-Allow-Origin: <origin (request.headers['origin'])>存在config.middleware.use ActionDispatch::Cookies
config.middleware.use ActionDispatch::Session::CookieStore, key: '_namespace_key'
Run Code Online (Sandbox Code Playgroud)
afterRails 应用程序中的任何回调挂钩中,还是发生在机架中?因为直到after_action在 applicaton_controller 中标题才不存在。domaincookie的设置有关系?我还在生产中使用 secure 和 httponly cookie,但在开发中仅使用 httponly。我在这里缺少什么?我花了几天时间寻找问题,但找不到解决办法。任何线索都会非常有帮助。谢谢
cookies[@name.to_sym] = {
value: @value,
expires: @expire,
httponly: true,
same_site: 'None',
secure: false # It works when I set it to false but doesn't work with `true` in production. In development env it works with either one.
}
response.set_cookie(
@name.to_sym,
value: @value,
expires: @expire,
httponly: true,
secure: true
)
Run Code Online (Sandbox Code Playgroud)
我观察到一件事。如果我设置secure: false了cookie,那么它可以在生产环境中工作,但不能在secure: true. 另一方面,secure: true在生产中使用response.set_cookie。
我的request.protocol是HTTP。secure: true如果请求协议是 HTTP 并且配置了选项,ActionDispatch::Cookies 是否可能甚至不设置 cookie 。
但我认为secure: true是针对客户端的。就像如果 cookie 是安全的,那么浏览器只会通过 https 协议发送它。我缺少什么?
我明白了这种行为的原因。实际上其他团队application gateway在生产中部署了一个。这导致 Rails 服务器收到最初是 HTTPS 的 HTTP 请求。
现在,当我将 cookie 标记为 时secure: true,如果协议是 HTTP,那么 ActionDispatch::Cookies 甚至不会发送 cookie 来响应请求。仅当协议为 HTTPS 时才会发送。如果我禁用安全,secure: false那么它就可以工作,或者如果我禁用应用程序网关,那么它就可以与 ActionDispatch::Cookie 一起使用。
这看起来很奇怪,因为secure它是客户端属性,但从 ActionDispatch::Cookies 的行为来看,如果协议是 HTTP 并且 secure 设置为 true,它甚至不会从服务器发送 cookie。
虽然我没有找到任何有关此行为的文档,但这就是它的工作原理。
| 归档时间: |
|
| 查看次数: |
3463 次 |
| 最近记录: |