Rails form_authenticity_token与params [:authenticity_token]不匹配

时间:2013-06-12 19:07:27

标签: ruby-on-rails ruby-on-rails-3 csrf csrf-protection

form_authenticity_token在什么情况下与params [:authenticity_token]不匹配?

我看到未经验证的请求进入我的应用程序,因此我重写了form_tag以打印出一些调试信息。

form_auth_token:    #{form_authenticity_token.inspect}
session_csrf_token: #{session['_csrf_token'].inspect}
params:             #{params.inspect}

我得到的输出显示会话具有匹配form_auth_token的正确令牌,但提交的真实性与真实性没有匹配:

form_auth_token:    "gckttsVeq2XvTBwQX3BaInWCivIhvR/mYBWjs119eb8="
session_csrf_token: "gckttsVeq2XvTBwQX3BaInWCivIhvR/mYBWjs119eb8="
params:             {"utf8"=>"✓", "authenticity_token"=>"+5IINl7vEh1jJJwP+RiXXws+4kEwM3fpJsCOn+gZ0AA=" ...

我认为根据定义,params [:authenticity_token]与form_authenticity_token相同。

  1. 我是以错误的方式调试吗?
  2. 可能导致这种情况的原因是什么?

1 个答案:

答案 0 :(得分:0)

一些快速建议:如果您使用rails jquery helpers,rails将自动在POST请求中从HTML文档的头部添加csrf-token元标记值。我会检查HTML文档的<head>标记中的值,看它是否匹配。