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

Lee*_*lla 6 session ruby-on-rails ruby-on-rails-3

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

当我使用导轨"form_tag"生成这些额外的行时,后期工作:

<div style="margin: 0pt; padding: 0pt; display: inline;">
<input type="hidden" value="?" name="utf8">
<input type="hidden" value="a_bunch_of_gibberish" name="authenticity_token">
</div>
Run Code Online (Sandbox Code Playgroud)

怎么了?

mon*_*cle 9

你在使用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保护"一节)


Abd*_*bdo 6

如果您要创建自己的html表单,也会发生此问题.

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

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

<form ... >
...
<%= hidden_field_tag "authenticity_token", form_authenticity_token %>
...
</form>
Run Code Online (Sandbox Code Playgroud)

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