Bry*_*ble 3 cookies redirect ruby-on-rails ruby-on-rails-4
我有一个控制器尝试获取表单输入,在cookie中设置值,然后重定向到将从该cookie拉出的页面.
问题是cookie永远不会在重定向标头中设置.
注意:我已在Chrome和FF中测试过.Rails版本是4.0.13.设置没有重定向的cookie可以按预期工作.
这是控制器代码:
def create
request.cookies[:foo] = "bar"
# also tried:
# cookies[:foo]="bar"
# cookies.signed[:foo]="bar"
# cookies[:foo] = {
# value: "bar",
# expires: 1.month.from_now,
# domain: ".myapplicationhostname.com"
# }
redirect_to root_url
end
Run Code Online (Sandbox Code Playgroud)
重定向上的响应头不包含Set-Cookie属性,因此,cookie值在重定向到路径中的控制器/操作中不可用.
我发现一些相互矛盾的证据表明某些浏览器在重定向中不接受cookie,但似乎不再是这种情况了?无论如何,FF或Chrome都没有Set-Cookie
在响应标题中显示,因此它不会出现这是一个浏览器问题.
这是来自cURL的标题响应,请注意缺少Set-Cookie
:
HTTP/1.1 302 Moved Temporarily
X-Frame-Options: SAMEORIGIN
X-XSS-Protection: 1; mode=block
X-Content-Type-Options: nosniff
X-UA-Compatible: chrome=1
Location: http://app.mydomain.com:3000/
Content-Type: text/html; charset=utf-8
Cache-Control: no-cache
X-Request-Id: 1fc1c7e5-7489-4720-bb70-28588f3abcb6
X-Runtime: 4.688166
Connection: close
Server: thin 1.6.2 codename Doc Brown
Run Code Online (Sandbox Code Playgroud)
如何让rails在重定向上设置cookie(或至少设置标题)?
看起来其原因实际上是CSRF保护.控制器已经实例化了一个NullCookieJar
,当有可能伪造的POST时,它会阻止写入cookie.
这是因为我的控制器被设置为响应异地表单,因此无法访问CSRF令牌.
因此,如果您在向Rails应用程序提交异地表单时遇到此问题,则需要禁用CSRF检查或编写自己的验证方法,如SO问题的答案所述:"从外部表格".
总结一下:
禁用检查
skip_before_filter :verify_authenticity_token, only: :my_action
Run Code Online (Sandbox Code Playgroud)
自定义检查
skip_before_filter :verify_authenticity_token, :only => :my_action
before_filter :verify_custom_authenticity_token, :only => :my_action
def verify_custom_authenticity_token
# checks whether the request comes from a trusted source
end
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4480 次 |
最近记录: |