Подтвердить что ты не робот

Использовать SSL для определенных маршрутов в Rails 3.1

Мне нужно принудительно SSL на всех маршрутах в моем приложении, кроме landing#index.

В config/application.rb у меня есть:

config.force_ssl = true

Тогда в landing_controller.rb у меня есть:

force_ssl :except => :index

Однако все маршруты по-прежнему перенаправляются на https.

Кто-нибудь знает, как условно принудительно использовать SSL в приложении Rails 3.1+?

Решение:

Добавьте в свой Gemfile следующее:

gem 'rack-ssl-enforcer'

Добавьте в свой config/application.rb следующее:

config.middleware.use Rack::SslEnforcer, :except => [ /\/$/ ], :strict => true
4b9b3361

Ответ 1

Я задал аналогичный вопрос о stackoverflow здесь и ему сказали использовать https://github.com/tobmatth/rack-ssl-enforcer. Я еще не пробовал это, но, основываясь на readme, он, по-видимому, решает вашу проблему условного применения ssl на определенных маршрутах.

Ответ 2

Rails 4 с ActiveAdmin 1.0b, я изменил config/initializers/active_admin.rb:

config.before_filter :force_ssl_redirect, if: :https_enabled?

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

Ответ 3

Вы можете сделать это следующим образом:

контроллер

force_ssl :except => :index

вид

Предположим, что имя вашего указателя index_landing_path

<%= link_to 'Landing', index_landing_path, :protocol => 'http' %>