Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 为什么post方法似乎正在清除我的rails会话数据?_Ruby On Rails_Ruby On Rails 3_Session - Fatal编程技术网

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

Ruby on rails 为什么post方法似乎正在清除我的rails会话数据?,ruby-on-rails,ruby-on-rails-3,session,Ruby On Rails,Ruby On Rails 3,Session,用户登录并在会话[:user_name]中验证和保存用户名后,使用method=“post”(使用标准html)提交表单时,将清除所有会话数据,并将用户路由回登录页面。如果方法设置为get,则不会发生这种情况 当我使用rails“form_tag”生成这些额外的行时,Post工作: <div style="margin: 0pt; padding: 0pt; display: inline;"> <input type="hidden" value="✓" name="utf8

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

当我使用rails“form_tag”生成这些额外的行时,Post工作:

<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>


发生了什么事

您使用的是Rails 3.0.4吗?听起来可能和这件事有关

如果您需要特定于您的需要的修复,您可以覆盖控制器中的#处理#未经验证的#请求。看


这是OmniAuth和OpenId的问题所在。(请参阅“Rails 3.0.4中的CSRF保护”一节)

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

如果您在不知道原因的情况下被重定向,那是因为您的应用程序控制器中有“防止伪造”

要允许您的表单发布,请向其添加以下代码(或使用
表单标签
,解释如下):


...
...

“form_标记”之所以有效,是因为执行了不同的操作,
form_标记
为您生成了隐藏字段=)

。您应该显示您的控制器代码我正在使用3.0.4,在浏览了“Ruby on Rails中的CSRF保护旁路”一文后,我认为您是对的:“此修复程序中有两个主要更改,CSRF保护失败时的行为已经更改,现在所有非GET请求都需要令牌。应用此修补程序后,失败的CSRF请求将不再生成HTTP 500错误,相反,会话将被重置。“有关如何覆盖伪造处理的简单说明:@Dave庆幸它成功了!”:-)
<form ... >
...
<%= hidden_field_tag "authenticity_token", form_authenticity_token %>
...
</form>