12

背景详情

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

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

ActionController::InvalidAuthenticityToken

环境细节

红宝石 2.3.1

宝石:

  • 轨道5.0.2
  • 设计=> 4.2.1
  • paper_trail => 7.0.1

重现步骤:

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

6 回答 6

32

事实证明,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 之前,此问题并未显现。

于 2017-04-11T21:03:56.277 回答
1

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

Rails.application.config.session_store

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

Rails.application.config.session_store :cookie_store, key: '_my_session', secure: true, same_site: :strict
于 2020-05-15T08:05:40.623 回答
1

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

config.action_controller.forgery_protection_origin_check = false

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

于 2021-10-25T22:43:52.977 回答
0

在我的项目中,我们遇到了这个问题,我们不能覆盖protect_from_forgery。创建的解决方案表明为我审计和工作的 github。

把它放在gemfile中:

gem "audited", github: "collectiveidea/audited"
于 2017-05-29T19:11:11.547 回答
0

文档中所述。

对于 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
于 2017-09-17T19:29:10.387 回答
0

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

于 2019-07-29T21:55:39.777 回答