我正在使用Rails 3.0.2,默认情况下在application_controller.rb中有protect_from_forgery
。
我想触发InvalidAuthenticityToken
。
要做到这一点,我已将此javascript添加到我的页面:
$('input[name=authenticity_token]').val('aaa')
使用Firebug检查DOM我看到authenticity_token
隐藏字段已正确更新。
如果我提交表单并从服务器检查日志,我会看到相对参数已正确设置为'aaa'。我会期望在处理请求时获得InvalidAuthenticityToken
,因为它是正确的!
这怎么可能?
答案 0 :(得分:12)
真实性令牌/ csrf行为的文档已过期。在这些情况下不再抛出InvalidAuthenticityToken
异常,而是重置您的会话。如果您希望以不同方式(或旧方法)处理此问题,您可以在控制器上的handle_unverified_request
中定义自己的行为。
答案 1 :(得分:1)
我还认为你必须重置驻留在你的表单所在的html页面的元标记中的真实性标记(我假设你在那里有<%= csrf_meta_tag%>)。 Rails检查表单中的任何一个令牌(您在上面的javascript中更改过)或html页面的元标记中的令牌是否与Rails的预期真实性令牌匹配,如果其中任何一个匹配,那么您的InvalidAuthenticityToken赢了“被触发....