Установить ssl_allowed / ssl_required для всех страниц в Rails 2? - PullRequest
1 голос
/ 10 февраля 2011

Я обнаружил, что вызовы AJAX не работают на моем сайте Rails, когда страница использует SSL / HTTPS.Я решил эту проблему, добавив

ssl_allowed :action1, :action2, :actionN

к соответствующим контроллерам.

Я предвижу, что в будущем это будет болью и склонностью к ошибкам, так как я, безусловно, забуду добавить действиев список ssl_allowed.

Есть ли способ включить ssl_allowed / ssl_required глобально в гем [ssl_requirement] [1] для всех действий каждого контроллера на моем сайте?Я попытался добавить следующее в ApplicationController, но это не сработало:

ssl_allowed :all

Ответы [ 2 ]

2 голосов
/ 14 июня 2011

Если вы не хотите зависеть от разветвленного плагина, вы можете переопределить ssl_allowed?в вашем контроллере:

 class ApplicationController < ActionController::Base
    ...
    private

    def ssl_allowed?
       true
    end
 end

РЕДАКТИРОВАТЬ: Это делает не делать то, что я думал, что сделалВместо отключения перенаправлений на http для страниц, которые не указаны ssl_required, он замыкает весь процесс перенаправления, чтобы ничего не делать.Это очень плохо.Код:

 def ensure_proper_protocol
   return true if ssl_allowed?

   if ssl_required? && !request.ssl?
     redirect_to "https://" + request.host + request.request_uri
     flash.keep
     return false
   elsif request.ssl? && !ssl_required?
     redirect_to "http://" + request.host + request.request_uri
     flash.keep
     return false
   end
 end

Добавление ssl_allowed?метод, подобный этому, будет только ответом, если вместо этого прочитать код:

def ensure_proper_protocol
  if ssl_required? && !request.ssl?
    redirect_to "https://" + request.host + request.request_uri
    flash.keep
    return false
  elsif request.ssl? && !ssl_required? && !ssl_allowed?
    redirect_to "http://" + request.host + request.request_uri
    flash.keep
    return false
  end
end
2 голосов
/ 11 февраля 2011

Я обнаружил в github разветвление ssl_requirement от grosser ( link ), которое включает "ssl_allowed: all", и заменил мою копию гема этой версией.Теперь я использую «ssl_allowed: all» в моем ApplicationController и больше нигде.Именно то, что я хотел.

...