ROR4中的request.cookies
和cookies
对象之间是否存在差异?
我目前正在尝试从我的node.js服务器向我的ROR4应用程序发送带cookie的请求。似乎在ROR应用程序中,request.cookies
包含我发送的cookie,但是cookies
对象(现有逻辑所基于的)没有它。
我搜索了文档,但无法找到任何相关信息。有没有我错过的东西?任何帮助表示赞赏。
答案 0 :(得分:6)
理想情况下,request.cookies
和cookies
应该相同。但是,在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等。
我看不出任何理由为什么一个键存在于一个键中而不存在另一个键。