背景详情
我使用设计进行身份验证以登录 Rails 5 应用程序。
每当我捆绑审核或 Paper Trail gem时,当我尝试#create一个新会话时(通过登录表单 - / users / sign_in),我收到以下错误:
ActionController::InvalidAuthenticityToken
环境详情
Ruby 2.3.1
宝石:
重现步骤:
答案 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