【问题标题】:Making the Cross-Site Request Forgery token live longer in Rails使跨站点请求伪造令牌在 Rails 中的寿命更长
【发布时间】:2011-01-16 09:20:20
【问题描述】:

在我制作的应用程序中,我收到很多这样的消息:

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

有没有办法让这些令牌寿命更长?

【问题讨论】:

    标签: ruby-on-rails csrf


    【解决方案1】:

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

    这里有一些代码,您可以添加到 JavaScript 中以添加正确的防伪令牌:

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

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

    【讨论】:

    • 令牌是否永远存在?否则,他们能活多久?你建议我应该在哪里添加(我认为我在整个项目中没有一行 JavaScript)。
    • 你说请求是通过AJAX?否则,Rails 中的表单助手会自动为您输入正确的真实性令牌。
    • Josh,它通过 AJAX,但使用 Rails 助手,因此它具有正确的令牌。否则它总是会失败,而不是一百次。
    猜你喜欢
    • 1970-01-01
    • 2021-10-17
    • 2011-05-17
    • 1970-01-01
    • 2014-08-31
    • 2014-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多