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

ald*_*ouw 10 ruby ruby-on-rails acts-as-audited devise

背景细节

我正在使用Devise进行身份验证以登录到Rails 5应用程序.

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

ActionController::InvalidAuthenticityToken
Run Code Online (Sandbox Code Playgroud)

环境细节

Ruby 2.3.1

宝石:

  • rails 5.0.2
  • devise => 4.2.1
  • paper_trail => 7.0.1

重现步骤:

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

ald*_*ouw 27

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

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

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

 protect_from_forgery with: :exception
Run Code Online (Sandbox Code Playgroud)

对此:

 protect_from_forgery prepend: true
Run Code Online (Sandbox Code Playgroud)

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

  • 这让我感到很困惑和沮丧.其他多个帖子提到"移动"它,但非特定的前置.谢谢. (2认同)