Rails 3 protect_from_forgery无法正常工作?

我正在使用Rails 3.0.2,默认情况下在application_controller.rb中有protect_from_forgery

我想触发一个InvalidAuthenticityToken
要做到这一点,我已将此javascript添加到我的页面:

 $('input[name=authenticity_token]').val('aaa') 

使用Firebug检查DOM我看到authenticity_token隐藏字段已正确更新。

如果我提交表单并从服务器检查日志,我会看到相对参数已正确设置为’aaa’。 我希望在处理请求时获得InvalidAuthenticityToken ,因为它是正确的!

这怎么可能?

真实性令牌/ csrf行为的文档已过期。 在这些情况下不再抛出InvalidAuthenticityTokenexception,而是重置会话。 如果您想以不同的方式处理(或旧方法),您可以在handle_unverified_request上的handle_unverified_request定义自己的行为。

我还相信你必须重置驻留在你的表单所在的html页面的元标记中的真实性标记(我假设你有<%= csrf_meta_tag%>)。 Rails检查表单中的任何一个令牌(您在上面的javascript中更改过)或html页面的元标记中的令牌是否与Rails的预期真实性令牌匹配,如果其中任何一个匹配,那么您的InvalidAuthenticityToken赢了“被触发….