ActionController :: InvalidAuthenticityToken Rails 5 / Devise / Audited / PaperTrail gem

时间:2017-04-11 21:00:09

标签: ruby-on-rails ruby devise acts-as-audited

背景详情

我使用设计进行身份验证以登录 Rails 5 应用程序。

每当我捆绑审核 Paper Trail gem时,当我尝试#create一个新会话时(通过登录表单 - / users / sign_in),我收到以下错误:

ActionController::InvalidAuthenticityToken

环境详情

Ruby 2.3.1

宝石:

  • rails 5.0.2
  • 设计 => 4.2.1
  • paper_trail => 7.0.1

重现步骤:

  1. 创建Rails 5应用程序
  2. 添加设计宝石
  3. 添加Audited或Paper Trail gem
  4. 尝试登录

5 个答案:

答案 0 :(得分:26)

事实证明,Devise documentation对于这个错误非常有启发性:

  

对于 Rails 5 ,请注意不再将protect_from_forgery添加到    before_action 链,因此如果您之前已设置authenticate_user    protect_from_forgery ,您的请求将导致“无法验证CSRF   令牌真实性。要解决此问题,请更改其中的顺序   你打电话给他们,或者使用protect_from_forgery prepend:true

修复是从我的应用程序控制器中更改代码:

 protect_from_forgery with: :exception

对此:

 protect_from_forgery prepend: true

在我尝试添加Audited或Paper Trail宝石之前,这个问题并没有表现出来。

答案 1 :(得分:0)

在我的项目中,我们遇到了这个问题,我们无法覆盖 protect_from_forgery 。 建立的解决方案是指示审计并为我工作的github。

将它放在gemfile中:

gem "audited", github: "collectiveidea/audited"

答案 2 :(得分:0)

documentation中所述。

  

对于Rails 5,请注意protect_from_forgery不再是前置的   到before_action链,所以如果你设置了authenticate_user   在protect_from_forgery之前,您的请求将导致"无法验证   CSRF令牌真实性。"要解决此问题,请更改订单   你称之为或者使用protect_from_forgery prepend:true。

我使用过这样的东西,对我有用。

class WelcomeController < ::Base
    protect_from_forgery with: :exception
    before_action :authenticate_model!
end

答案 3 :(得分:0)

对我来说,解决方案是手动转到浏览器的设置并删除缓存。

答案 4 :(得分:0)

这在我的开发机器上发生了。原来我正在设置

Rails.application.config.session_store

出于生产安全目的。并以某种方式在开发模式下运行此代码。我必须注释掉这一行,它现在可以正常工作。

Rails.application.config.session_store :cookie_store, key: '_my_session', secure: true, same_site: :strict