ActionController::InvalidAuthenticityToken Rails 5 / 设计 / 审核 / PaperTrail gem
ActionController::InvalidAuthenticityToken Rails 5 / Devise / Audited / PaperTrail gem
背景详情
我正在使用 Devise 进行身份验证以登录 Rails 5 应用程序。
每当我捆绑 Audited 或 Paper Trail gem 时,当我尝试#create 一个新会话时(通过登录表单 - /users/sign_in),我收到以下错误:
ActionController::InvalidAuthenticityToken
环境详细信息
Ruby 2.3.1
宝石:
- rails 5.0.2
- 设计 => 4.2.1
- paper_trail => 7.0.1
重现步骤:
- 创建Rails 5个申请
- 添加设计gem
- 添加审计或书面记录gem
- 尝试登录
事实证明,Devise documentation 就此错误而言非常具有启发性:
For Rails 5, note that protect_from_forgery is no longer prepended to
the before_action chain, so if you have set authenticate_user before
protect_from_forgery, your request will result in "Can't verify CSRF
token authenticity." To resolve this, either change the order in which
you call them, or use protect_from_forgery prepend: true.
解决方法是更改我的应用程序控制器中的代码:
protect_from_forgery with: :exception
为此:
protect_from_forgery prepend: true
直到我尝试添加 Audited 或 Paper Trail gem 后,这个问题才出现。
在我的项目中我们遇到了这个问题,我们无法覆盖 protect_from_forgery。
所建立的解决方案表明 github 经过审核并为我工作。
将其放入 gemfile 中:
gem "audited", github: "collectiveidea/audited"
如 documentation所述。
For Rails 5, note that protect_from_forgery
is no longer prepended
to the before_action chain, so if you have set authenticate_user
before protect_from_forgery, your request will result in "Can't verify
CSRF token authenticity." To resolve this, either change the order in
which you call them, or use protect_from_forgery prepend: true.
我用过类似的东西,它对我有用。
class WelcomeController < ::Base
protect_from_forgery with: :exception
before_action :authenticate_model!
end
我的解决方案是手动转到我的浏览器设置并删除缓存。
这发生在我的开发机器上。结果我设置了
Rails.application.config.session_store
出于生产中的安全目的。不知何故,这段代码在开发模式下得到了运行。我必须注释掉这一行,它现在工作正常。
Rails.application.config.session_store :cookie_store, key: '_my_session', secure: true, same_site: :strict
任何人 运行 可以尝试的另一件事是将以下内容添加到您的环境配置文件中:
config.action_controller.forgery_protection_origin_check = false
对我来说,生产工作正常,但暂存和开发工作不正常,这为我解决了这个问题。
背景详情
我正在使用 Devise 进行身份验证以登录 Rails 5 应用程序。
每当我捆绑 Audited 或 Paper Trail gem 时,当我尝试#create 一个新会话时(通过登录表单 - /users/sign_in),我收到以下错误:
ActionController::InvalidAuthenticityToken
环境详细信息
Ruby 2.3.1
宝石:
- rails 5.0.2
- 设计 => 4.2.1
- paper_trail => 7.0.1
重现步骤:
- 创建Rails 5个申请
- 添加设计gem
- 添加审计或书面记录gem
- 尝试登录
事实证明,Devise documentation 就此错误而言非常具有启发性:
For Rails 5, note that protect_from_forgery is no longer prepended to the before_action chain, so if you have set authenticate_user before protect_from_forgery, your request will result in "Can't verify CSRF token authenticity." To resolve this, either change the order in which you call them, or use protect_from_forgery prepend: true.
解决方法是更改我的应用程序控制器中的代码:
protect_from_forgery with: :exception
为此:
protect_from_forgery prepend: true
直到我尝试添加 Audited 或 Paper Trail gem 后,这个问题才出现。
在我的项目中我们遇到了这个问题,我们无法覆盖 protect_from_forgery。 所建立的解决方案表明 github 经过审核并为我工作。
将其放入 gemfile 中:
gem "audited", github: "collectiveidea/audited"
如 documentation所述。
For Rails 5, note that
protect_from_forgery
is no longer prepended to the before_action chain, so if you have set authenticate_user before protect_from_forgery, your request will result in "Can't verify CSRF token authenticity." To resolve this, either change the order in which you call them, or use protect_from_forgery prepend: true.
我用过类似的东西,它对我有用。
class WelcomeController < ::Base
protect_from_forgery with: :exception
before_action :authenticate_model!
end
我的解决方案是手动转到我的浏览器设置并删除缓存。
这发生在我的开发机器上。结果我设置了
Rails.application.config.session_store
出于生产中的安全目的。不知何故,这段代码在开发模式下得到了运行。我必须注释掉这一行,它现在工作正常。
Rails.application.config.session_store :cookie_store, key: '_my_session', secure: true, same_site: :strict
任何人 运行 可以尝试的另一件事是将以下内容添加到您的环境配置文件中:
config.action_controller.forgery_protection_origin_check = false
对我来说,生产工作正常,但暂存和开发工作不正常,这为我解决了这个问题。