2012-05-15 3 views
11

Ich muss SSL auf alle Routen in meiner Anwendung erzwingen, mit Ausnahme von landing#index.Erzwingen Sie SSL für bestimmte Routen in Rails 3.1

In config/application.rb, ich habe:

config.force_ssl = true 

Dann in landing_controller.rb, ich habe:

force_ssl :except => :index 

Jedoch werden alle Routen noch zu https umgeleitet werden.

Kann jemand SSL in einer Rails 3.1 + Anwendung bedingt erzwingen?

Lösung:

Fügen Sie den folgenden Code zu Ihrem Gemfile:

gem 'rack-ssl-enforcer' 

Fügen Sie folgendes zu Ihrem config/application.rb:

config.middleware.use Rack::SslEnforcer, :except => [ /\/$/ ], :strict => true 

Antwort

13

ich eine ähnliche Frage auf Stackoverflow here gefragt und mir wurde gesagt https://github.com/tobmatth/rack-ssl-enforcer zu verwenden. Ich habe es noch nicht ausprobiert, aber basierend auf der Readme scheint es das Problem zu lösen, auf bestimmten Routen SSL zu erzwingen.

+1

Prost auf das! Mit der folgenden Zeile in 'config/application.rb' wurde behoben:' config.middleware.use Rack :: SslEnforcer,: except => [/ \/$ /],: strict => true' –

-2

Sie können es auf diese Weise tun:

Controller

force_ssl :except => :index 

Ansicht

Zeigepfadnamen angenommen ist index_landing_path

<%= link_to 'Landing', index_landing_path, :protocol => 'http' %> 
+1

Ich habe diesen Ansatz versucht, aber alle Anfragen noch weitergeleitet werden 'https'. Ich fügte meinem Controller 'force_ssl: except =>: index' hinzu, ohne Erfolg. –

6

Schienen 4 mit ActiveAdmin 1.0b, modifizierte I config/Initialisierungen/active_admin.rb:

config.before_filter :force_ssl_redirect, if: :https_enabled? 

force_ssl_redirect in Action/lib/action_controller/Metall/force_ssl.rb definiert ist, und ist das, was force_ssl Klasse Rails Methodenaufrufe.

https_enabled? in meinem application_controller.rb definiert:

def https_enabled? 
    ENV['HTTPS_ENABLED'] == 'true' 
end