2012-05-15 9 views
11

Necesito forzar SSL en todas las rutas en mi aplicación a excepción de landing#index.Forzar SSL para rutas específicas en Rails 3.1

En config/application.rb, tengo:

config.force_ssl = true 

Luego, en landing_controller.rb, que tengo:

force_ssl :except => :index 

Sin embargo, todas las rutas siguen siendo redirigido a https.

¿Alguien sabe cómo forzar condicionalmente SSL en una aplicación de Rails 3.1+?

Solución:

Añadir lo siguiente a su Gemfile:

gem 'rack-ssl-enforcer' 

Añadir lo siguiente a su config/application.rb:

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

Respuesta

13

me hizo una pregunta similar sobre stackoverflow here y me dijeron que usar https://github.com/tobmatth/rack-ssl-enforcer. Aún no lo he probado, pero basado en el archivo léame, parece resolver su problema de aplicar condicionalmente SSL en ciertas rutas.

+1

¡Saludos a eso! Corregido con la siguiente línea en 'config/application.rb':' config.middleware.use Rack :: SslEnforcer,: except => [/ \/$ /],: strict => true' –

-2

Usted puede hacerlo de esta manera:

controlador

force_ssl :except => :index 

vista

suponiendo su nombre de ruta del índice es index_landing_path

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

lo he intentado enfoque, pero todas las solicitudes todavía son redirigidos a 'https'. Agregué 'force_ssl: except =>: index' a mi controlador sin ningún resultado. –

6

Carriles 4 con 1.0b ActiveAdmin, I modificados config/inicializadores/active_admin.rb:

config.before_filter :force_ssl_redirect, if: :https_enabled? 

force_ssl_redirect se define en actionpack/lib/action_controller/metal/force_ssl.rb y es lo que clase force_ssl Rails llamadas de método.

https_enabled? definido en mi application_controller.rb:

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