在Rails中使跨站点请求伪造令牌的寿命更长

时间:2010-02-13 00:08:51

标签: ruby-on-rails csrf

在一个应用程序中,我发现我收到了很多这样的消息:

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)并且令牌过期。

有没有办法让这些代币延长寿命?

1 个答案:

答案 0 :(得分:2)

时间限制没有理由导致此异常。当请求中收到的伪造保护令牌与应有的伪造保护令牌不同时,会导致异常ActionController::InvalidAuthenticityToken

以下是一些代码,您可以添加到JavaScript中以添加正确的伪造保护令牌:

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

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