Необходимо убедиться, что вы установили сеанс: secure => true, чтобы он передавался только по протоколу HTTPS. Как только вы это сделаете, вам не нужно будет применять ssl для всего трафика (поскольку браузер определит, следует ли его отправлять). Его нужно применять только на контроллерах или действиях, которые зависят от сеанса.
Чтобы применить HTTPS, используйте что-то вроде гема ssl_requirement.
Если вы хотите применить HTTPS для всего трафика после входа пользователя, вам, вероятно, потребуется установить незащищенный файл cookie, чтобы проверить, следует ли применять HTTPS.
class ApplicationController < ActionController::Base
def ssl_required?
# Allow HTTP, but enforce HTTPS for users with the 'ssl' cookie set
# current_user probably isn't needed here
Rails.env.production? && (current_user || cookies[:ssl])
end
end
class AccountsController < ApplicationController
def login
if current_user = User.authenticate(user, password)
# This isn't required for AccountsController,
# because it enforces HTTPS below.
cookies[:ssl] = '1'
end
end
def logout
cookies.delete(:ssl)
end
# Enforce HTTPS for the Accounts controller
def ssl_required?
Rails.env.production?
end
end