2010-02-13 61 views
0

令牌活得更长。在一个应用程序,我让我得到很多这样的消息:使得跨站请求伪造Rails中

A ActionController::InvalidAuthenticityToken occurred in items#vote_up: 
    ActionController::InvalidAuthenticityToken 
    /var/lib/gems/1.8/gems/actionpack-2.3.4/lib/action_controller/request_forgery_protection.rb:79:in `verify_authenticity_token' 

我怀疑它的发生,因为人们花费了大量的时间对页面没有刷新它(它使用ajax)并且令牌过期。

有没有办法让这些标记寿命更长?

回答

2

没有理由为什么时间限制会导致此异常。 ActionController::InvalidAuthenticityToken是由于请求中收到的伪造保护令牌与应该有的不同而引起的。

下面是一些代码,您可以添加到您的JavaScript以正确的防伪保护令牌补充:

$.ajax({ 
    url: url, 
    data: { 
    authenticity_token: <%= form_authenticity_token.to_json %>, 
    ... 
    } 
}); 

这样,你的令牌将是正确的。

+0

令牌永远活着吗?否则,他们住多久?你在哪里建议我应该补充一点(我不认为我在整个项目中只有一行JavaScript)。 – Pablo 2010-02-13 13:47:36

+0

你说这个请求是AJAX?否则,Rails中的表单助手会自动为您提供正确的真实性标记。 – 2010-02-14 10:40:28

+0

乔希,它是通过AJAX,但使用Rails助手,所以它有正确的标记。否则它总会失败,而不是百次之一。 – Pablo 2010-03-21 14:03:18

相关问题