2012-05-15 11 views
11

Devo forzare SSL su tutte le route nella mia applicazione ad eccezione di landing#index.Forza SSL per rotte specifiche in Rails 3.1

In config/application.rb, ho:

config.force_ssl = true 

Poi nel landing_controller.rb, ho:

force_ssl :except => :index 

Tuttavia, tutti i circuiti vengono ancora reindirizzato al https.

Qualcuno sa come forzare forzatamente SSL in un'applicazione Rails 3.1+?

Soluzione:

Aggiungere il seguente alla Gemfile:

gem 'rack-ssl-enforcer' 

Aggiungere il seguente alla config/application.rb:

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

risposta

13

ho fatto una domanda simile su StackOverflow here ed è stato detto di utilizzare https://github.com/tobmatth/rack-ssl-enforcer. Non l'ho ancora provato, ma basandomi sul readme, sembra che risolva il problema di applicare ssl condizionalmente su determinate rotte.

+1

Saluti a quello! Risolto con la seguente riga in 'config/application.rb':' config.middleware.use Rack :: SslEnforcer,: except => [/ \/$ /],: strict => true' –

-2

si può fare in questo modo:

regolatore

force_ssl :except => :index 

vista

supponendo l'indice nome percorso è index_landing_path

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

ho provato questo approccio, ma tutte le richieste sono ancora reindirizzato a 'https'. Ho aggiunto 'force_ssl: except =>: index' al mio controller senza alcun risultato. –

6

rotaie 4 con ActiveAdmin 1.0b, I modificate config/initializers/active_admin.rb:

config.before_filter :force_ssl_redirect, if: :https_enabled? 

force_ssl_redirect definito nella actionpack/lib/action_controller/metallo/force_ssl.rb ed è che classe Rotaie force_ssl chiamate di metodo.

https_enabled? definito nel mio application_controller.rb:

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