2012-05-15 3 views
11

Je dois forcer SSL sur toutes les routes dans mon application à l'exception de landing#index.Force SSL pour des routes spécifiques dans Rails 3.1

En config/application.rb, je:

config.force_ssl = true 

Puis, en landing_controller.rb, j'ai:

force_ssl :except => :index 

Cependant, toutes les routes sont toujours redirigés vers https.

Est-ce que quelqu'un sait comment forcer SSL dans une application Rails 3.1+?

Solution:

Ajouter ce qui suit à votre Gemfile:

gem 'rack-ssl-enforcer' 

Ajoutez ce qui suit à votre config/application.rb:

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

Répondre

13

j'ai posé une question similaire sur stackoverflow here et on m'a dit d'utiliser https://github.com/tobmatth/rack-ssl-enforcer. Je n'ai pas encore essayé, mais basé sur le readme, il semble résoudre votre problème de mise en application conditionnelle ssl sur certaines routes.

+1

Bravo à ça! Correction avec la ligne suivante dans 'config/application.rb':' config.middleware.use Rack :: SslEnforcer,: sauf => [/ \/$ /],: strict => true' –

-2

Vous pouvez le faire de cette façon:

contrôleur

force_ssl :except => :index 

vue

en supposant que votre nom de chemin d'index est index_landing_path

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

J'ai essayé cette approche, mais toutes les demandes sont toujours redirigés vers 'https'. J'ai ajouté 'force_ssl: except = =: index' à mon contrôleur en vain. –

6

Rails 4 avec ActiveAdmin 1.0b, je modifier config/initializers/active_admin.rb:

config.before_filter :force_ssl_redirect, if: :https_enabled? 

force_ssl_redirect est défini dans actionpack/lib/action_controller/métal/force_ssl.rb et est ce que Rails classe force_ssl appels de méthode.

https_enabled? défini dans mon application_controller.rb:

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