在Rails 3.1中强制SSL用于特定路由

Gra*_*wan 11 ruby ssl ruby-on-rails ruby-on-rails-3.1

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

config/application.rb,我有:

config.force_ssl = true
Run Code Online (Sandbox Code Playgroud)

然后landing_controller.rb,我有:

force_ssl :except => :index
Run Code Online (Sandbox Code Playgroud)

但是,所有路由仍然被重定向到https.

有谁知道如何在Rails 3.1+应用程序中有条件地强制SSL?

解:

将以下内容添加到您的Gemfile:

gem 'rack-ssl-enforcer'
Run Code Online (Sandbox Code Playgroud)

将以下内容添加到您的config/application.rb:

config.middleware.use Rack::SslEnforcer, :except => [ /\/$/ ], :strict => true
Run Code Online (Sandbox Code Playgroud)

ans*_*ans 13

我在这里问了一个关于stackoverflow的类似问题,并被告知使用https://github.com/tobmatth/rack-ssl-enforcer.我还没有尝试过,但基于自述文件,它似乎解决了在某些路由上有条件地强制执行ssl的问题.


Luk*_*e W 6

使用ActiveAdmin 1.0b的Rails 4,我修改了config/initializers/active_admin.rb:

config.before_filter :force_ssl_redirect, if: :https_enabled?
Run Code Online (Sandbox Code Playgroud)

force_ssl_redirect在actionpack/lib/action_controller/metal/force_ssl.rb中定义,是Rails的force_ssl类方法调用的.

https_enabled? 在我的application_controller.rb中定义:

def https_enabled?
  ENV['HTTPS_ENABLED'] == 'true'
end
Run Code Online (Sandbox Code Playgroud)