Ответ 1
Похоже, что это будет решено в Rails 4! https://github.com/rails/rails/commit/9b4514c3b8ecfbc40a44dbd4c2ebd4ce67f4a459
Я разрабатываю сайт, который очень часто смешивает http и https - что лучший/самый простой способ заставить ссылки использовать правильный протокол для маршрута - может ли он указываться в файле маршрутов?
Скажем, у меня есть следующий маршрут в Rails 3.
match "/test" => "test#index", :as => :test, :constraints => { :protocol => 'https' }
Если я на странице http, и я использую test_url()
, он выведет http://domain.com/test. Вместо этого я хочу https://domain.com/test.
Я знаю, что могу использовать test_url(:secure => true)
, но это дублирующая логика.
Я знаю, что мог http://domain.com/test в https://domain.com/test, но это дополнительный перенаправление, плюс он не работает на сообщениях формы.
Идеи?
Похоже, что это будет решено в Rails 4! https://github.com/rails/rails/commit/9b4514c3b8ecfbc40a44dbd4c2ebd4ce67f4a459
Используйте test_url (: protocol = > 'https') для URL-адресов https.
Не пробовал, но добавьте это в свой ApplicationController
:
def default_url_options(options={})
{ :secure => true }
end
def default_url_options(options={})
{ :protocol => "https" }
end
Для Rails 3.2 я использовал комбинацию ответа @apneadiving. Добавление кода ниже в мой ApplicationController
def default_url_options(options={})
options.merge{ :protocol => "https" }
end
Rails 3 Переадресация маршрутизации SSL с https на http отвечает на этот вопрос довольно хорошо. Короче говоря, там нет отличного способа сделать это. Я отправил следующую ошибку Rails: https://github.com/rails/rails/issues/3571
Вы можете использовать плагин под названием ss_requirement, он предоставит вам такие методы, как ssl_required ssl_allowed
Вы можете просто добавить это в свой контроллер, чтобы включить ot disable https при любом действии
ssl_allowed :login, :update_profile