为什么post方法似乎正在清除我的rails会话数据?

在用户登录并且他们的用户名已经过身份validation并保存在会话[:user_name]中之后,当使用method =“post”(使用标准html)提交表单时,将清除所有会话数据并将用户路由回登录页面。 如果方法设置为get,则不会发生这种情况。

当我使用rails“form_tag”生成这些附加行时,Post可以工作:

怎么了?

你在使用Rails 3.0.4吗? 听起来它可能与CSRF修复有关 。

如果您需要特定于您需要的修补程序,则可以在控制器中覆盖#handle_unverified_request。 请参阅https://github.com/rails/rails/blob/master/actionpack/lib/action_controller/metal/request_forgery_protection.rb 。

这是OmniAuth和OpenId这个问题的一个例子 。 (参见“Rails 3.0.4中的CSRF保护”一节)

如果您正在创建自己的html表单,也会发生此问题。

如果你在不知道原因的情况下被重定向,那是因为你的ApplicationController中有“protect_from_forgery”

为了允许您的表单发布,请向其添加以下代码(或使用form_tag ,下面的说明):

 
... <%= hidden_field_tag "authenticity_token", form_authenticity_token %> ...

“form_tag”工作的原因是因为form_tag为您生成隐藏字段=)