2012-03-03 2 views
0

Я использую force_ssl в своих контроллерах Users и Sessions. Это отлично работает. Когда я нахожу действия в любом из этих контроллеров, мой браузер перенаправляет на https. Проблема в том, что после перенаправления пользователя на https браузер будет продолжать использовать https, по крайней мере, при использовании относительных URL. Я предпочел бы, чтобы пользователь использовал http для других страниц в приложении. Я придумал 3 возможных стратегии, которые помогут пользователям вернуться к http для других страниц.Force_ssl/принудительно вернуться к http. Каков наилучший способ сделать это?

  1. Используйте абсолютные URL-адреса вместо относительных URL-адресов. С помощью этой стратегии я избегаю использования таких вещей, как root_path, но вместо этого использую root_url. Я могу установить default_url_options в своем контроллере приложений для использования протокола http. Таким образом, все ссылки в моем приложении будут пытаться перенаправить пользователя на http. Они всегда могли вручную переключать его на https в браузере, но мне все равно, делают ли они это.

  2. Напишите перед фильтром, аналогичным https://gist.github.com/1040964. Мне это не очень нравится, потому что мне нужно будет повторить, какие контроллеры/действия я заставляю ssl в контроллере приложений, а также конкретный контроллер, в котором я использую force_ssl.

  3. Используйте этот плагин https://github.com/bartt/ssl_requirement. Этот плагин кажется приятным, потому что он по умолчанию заставит http, если я ничего не скажу. Принуждение к ssl кажется очень похожим на метод force_ssl include. Это похоже на хорошее решение, но я не хочу полагаться на плагин, если есть простой способ сделать это без него.

Я не могу решить, какой из этих 3 вариантов является лучшим и я ищу руководство. Я также новичок в Rails, поэтому, если какое-либо из этих решений «плохо», пожалуйста, дайте мне знать. Также, если есть другие варианты, о которых я не знаю, сообщите мне.

Какое решение лучше, если таковое имеется? (Rails 3.2)

ответ

1

Лучшее - это плагин. Исходный код этого плагина очень похож на код в вашем стиле. В самом деле, если вы непрочь плагин, все, что вам действительно нужно, это часть здесь:

https://github.com/bartt/ssl_requirement/blob/master/lib/ssl_requirement.rb#L112

Вы можете адаптировать его к application_controller.rb или полностью взять на себя плагин.

Cheers.

Смежные вопросы