5

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

我想触发一个InvalidAuthenticityToken.
为此,我已将此 javascript 添加到我的页面:

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

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

如果我提交表单并检查来自服务器的日志,我会看到相关参数正确设置为“aaa”。我希望得到一段InvalidAuthenticityToken时间的处理请求,因为它是正确的!

这怎么可能?

4

2 回答 2

12

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

于 2011-05-23T04:33:12.770 回答
1

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

于 2012-04-02T23:32:15.207 回答