繁体   English   中英

ActionController::InvalidAuthenticityToken Rails 5 / 设计 / 审计 / PaperTrail gem

[英]ActionController::InvalidAuthenticityToken Rails 5 / Devise / Audited / PaperTrail gem

背景详情

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

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

ActionController::InvalidAuthenticityToken

环境详情

红宝石 2.3.1

宝石:

  • 导轨5.0.2
  • 设计=> 4.2.1
  • 纸迹=> 7.0.1

重现步骤:

  1. 创建 Rails 5 应用程序
  2. 添加设计宝石
  3. 添加审计或纸迹宝石
  4. 尝试登录

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

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

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

 protect_from_forgery with: :exception

对此:

 protect_from_forgery prepend: true

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

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

Rails.application.config.session_store

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

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

.在我的项目中,我们这个问题,我们无法覆盖 所建立的解决方案表明已审计并为我工作的 github。

把它放在 gemfile 中:

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

文档中所述。

对于 Rails 5,请注意, protect_from_forgery不再预先添加到 before_action 链中,因此如果您在protect_from_forgery 之前设置了authenticate_user,您的请求将导致“无法验证CSRF 令牌真实性”。 要解决此问题,请更改您调用它们的顺序,或使用protect_from_forgery prepend: true。

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

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

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

对于遇到此问题的任何人,要尝试的另一件事是将以下内容添加到您的环境配置文件中:

config.action_controller.forgery_protection_origin_check = false

对我来说,生产工作正常,但分期和开发工作不正常,这为我解决了这个问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM