![](/img/trans.png)
[英]Rails 5 + Devise: ActionController::InvalidAuthenticityToken
[英]ActionController::InvalidAuthenticityToken Rails 5 / Devise / Audited / PaperTrail gem
背景详情
我正在使用Devise进行身份验证以登录Rails 5应用程序。
每当我捆绑Audited或Paper Trail gem 时,当我尝试#create 一个新会话(通过登录表单 - /users/sign_in)时,我都会收到以下错误:
ActionController::InvalidAuthenticityToken
环境详情
红宝石 2.3.1
宝石:
重现步骤:
事实证明,关于这个错误, 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.