跳过/禁用rails中特定控制器的force_ssl

问题描述 投票:0回答:4

我需要在应用程序中的所有路由上强制使用 SSL,除了

message#new
控制器之外。

config/environments/production.rb
,我有:

config.force_ssl = true

现在所有路由都重定向到 https,现在我想为

message#new
控制器禁用该功能。

有谁知道如何在 Rails 4+ 应用程序中禁用特定控制器的强制 SSL?

ruby-on-rails ruby ruby-on-rails-4 ssl
4个回答
34
投票

根据文档,以下应该可以工作(但仅适用于rails > 5版本):

config.ssl_options = {
  redirect: {
    exclude: -> request { request.path =~ /healthcheck/ }
  }
}

8
投票
skip_before_action :verify_authenticity_token
force_ssl except: [:index,:create]

它对我有用。


0
投票

如果您需要禁用运行状况检查路径的 TLS,请使用确切的路径:

    config.ssl_options = {
      redirect: { exclude: -> request { request.path == '/healthcheck' } }
    }

当前接受的答案建议使用非常宽松的正则表达式,这将绕过包含

healthcheck
路径中任何位置的任何路径的 TLS。这是一个重大的安全风险。安全许可名单应始终尽可能具体。


-2
投票

MessagesController.rb
-

中执行此操作
  force_ssl except: [:new]
© www.soinside.com 2019 - 2024. All rights reserved.