即使将CSRF令牌发送到服务器,也无法验证CSRF令牌

时间:2015-05-31 14:47:30

标签: ruby-on-rails

我收到此错误消息:无法验证CSRF令牌真实性

虽然当我查看日志时,我可以看到客户端确实将令牌发送到服务器。

I, [2015-05-31T16:40:28.832719 #30768]  INFO -- :   Parameters: {"utf8"=>"✓", "authenticity_token"=>"E1GjDUm3LomswskJKg72HjJz7fQ5BOWceGwAauq5B48=", "company"=>{"work_time_start"=>"8", "work_time_end"=>"18", "time_rounding"=>"15", "weekends"=>"6,0", "overlap"=>"1", "week_start"=>"1", "currency"=>"USD", "number_format"=>"12,345.00", "date_format"=>"MM/DD/YYYY", "time_format"=>"12-hour (06:00 PM)"}, "commit"=>"Save"}
W, [2015-05-31T16:40:28.833604 #30768]  WARN -- : Can't verify CSRF token authenticity
I, [2015-05-31T16:40:28.837829 #30768]  INFO -- : Completed 422 Unprocessable Entity in 5ms (ActiveRecord: 0.0ms)

当我查看发送给客户端的HTML时,我看到完全相同的标记:

在简单的形式部分:

<input name="authenticity_token" type="hidden" value="E1GjDUm3LomswskJKg72HjJz7fQ5BOWceGwAauq5B48=" />

还有元数据:

<meta content="authenticity_token" name="csrf-param" />
<meta content="E1GjDUm3LomswskJKg72HjJz7fQ5BOWceGwAauq5B48=" name="csrf-token" />

为什么服务器拒绝令牌?

编辑:我已经有&lt;%= csrf_meta_tag%&gt;在我的布局中。如您所见,令牌也随发送请求一起发送,因此令牌存在于客户端并与请求一起发送。它也是服务器发送的相同令牌(参见我的解释的第二部分)。

Edit2:更多信息:在Firefox中尝试过此功能。之后我尝试在IE中进行私人会话,并且它也有效。所以似乎有一个cookie阻止某些东西。

2 个答案:

答案 0 :(得分:1)

就我而言,它是生产服务器上遗忘的rake assets:precompile。一切都在开发中运作良好,而不是在生产中。由于在这个特定的情况下,我没有使用资产管道,我错过了预编译的应用程序.js当然会导致turbo-links出现问题。

答案 1 :(得分:0)

我知道这听起来很可怜​​,但经过一段时间的努力,我重新启动了电脑,现在一切都工作得很好¯_(ツ)_ /¯。