request.cookies和控制器中的cookie有什么区别?

时间:2016-06-06 12:22:02

标签: ruby ruby-on-rails-4

ROR4中的request.cookiescookies对象之间是否存在差异?

我目前正在尝试从我的node.js服务器向我的ROR4应用程序发送带cookie的请求。似乎在ROR应用程序中,request.cookies包含我发送的cookie,但是cookies对象(现有逻辑所基于的)没有它。

我搜索了文档,但无法找到任何相关信息。有没有我错过的东西?任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:6)

理想情况下,request.cookiescookies应该相同。但是,在POST(创建操作)请求中,rails会验证XSRF令牌。如果该验证失败,则request.cookies中无法使用request.cookie_jar中的Cookie。这意味着,它们无法通过cookies方法获得。

确定Cookie是否不匹配是因为XSRF令牌丢失。在您的请求中,尝试识别Cookie哈希的类。 cookies.hash应该返回ActionDispatch::Cookies::CookieJar。如果它返回ActionController::RequestForgeryProtection::ProtectionMethods::NullSession::NullCookieJar,则表示XSRF令牌不匹配。

当您通过javascript进行这些调用时,可能会发生这种情况,默认情况下不会选择XSRF令牌并随请求一起发送。请参阅此处的答案:https://stackoverflow.com/a/8175979/976880以了解如何修复它。

答案 1 :(得分:4)

request.cookies是一种Rack provided方法。它只是通过解析cookie头获得的键值对的散列。

控制器cookies方法返回request.cookie_jar。 cookie jar是根据完全相同的request.cookies数据构建的,但解析它会在顶部添加一堆rails功能,例如签名cookie,将数据序列化到cookie等。

我看不出任何理由为什么一个键存在于一个键中而不存在另一个键。