Если вы хотите, чтобы ваше все приложение обслуживалось по протоколу https, тогда с Rails 4.0 лучший способ сделать это - включить force_ssl
в файле конфигурации следующим образом:
# config/environments/production.rb
Rails.application.configure do
# [..]
# Force all access to the app over SSL, use Strict-Transport-Security,
# and use secure cookies.
config.force_ssl = true
end
По умолчанию эта опция уже присутствует в config/environments/production.rb
во вновь созданных приложениях, но закомментирована.
Как говорится в комментарии, он не только перенаправляет на https, но также устанавливает заголовок Strict-Transport-Security
( HSTS ) и гарантирует, что флаг безопасности установлен во всех файлах cookie. Обе меры повышают безопасность вашего приложения без существенных недостатков. Используется ActionDispatch:SSL
.
Настройки истечения HSTS по умолчанию установлены на год и не включают субдомены, что, вероятно, подходит для большинства приложений. Вы можете настроить это с помощью опции hsts
:
config.hsts = {
expires: 1.month.to_i,
subdomains: false,
}
Если вы используете Rails 3 (> = 3.1) или не хотите использовать https для всего приложения, тогда вы можете использовать метод force_ssl
в контроллер:
class SecureController < ApplicationController
force_ssl
end
Вот и все. Вы можете установить его для контроллера или в вашем ApplicationController
. Вы можете принудительно установить https, используя знакомые опции if
или unless
; например:
# Only when we're not in development or tests
force_ssl unless: -> { Rails.env.in? ['development', 'test'] }