Relacionados: Rails 3 SSL routing redirects from https to http (lamentablemente no funcionó).¿cómo debo hacer para que todas las rutas de Devise usen https?
duplicado, pero la respuesta no funcionó para mí: setting up ssl on devise
Tengo una aplicación web que ha estado trabajando bien durante un tiempo, pero ahora tengo que añadir SSL para las rutas de entrada/editar acct. Estoy usando Devise para la autenticación. Encontré una entrada en la wiki de diseño que hizo que el proceso pareciera bastante simple, pero maldita sea si puedo hacer que funcione. La parte sencilla era la siguiente:
#in config/environments/production.rb
config.to_prepare { Devise::SessionsController.force_ssl }
config.to_prepare { Devise::RegistrationsController.force_ssl }
Y luego hay cerca de 25 líneas de código en este GIST: https://gist.github.com/1040964
que obtuve que trabajar bastante bien, pero cuando cada vez que cierre la sesión me sale un 301 de la sesiones DELETE acción que me envía a un GET.
Started DELETE "https://stackoverflow.com/users/sign_out" for 98.246.164.160 at 2012-03-02 01:45:42 +0000
[02 Mar 01:45 10886 INFO] Processing by Devise::SessionsController#destroy as HTML
[02 Mar 01:45 10886 INFO] Parameters: {"authenticity_token"=>"fI4VZ4V0Go2Civo3sJz8Dv5/Wtaa90ynaYr+xxx="}
[02 Mar 01:45 10886 DEBUG] Parameters: {"_method"=>"delete", "authenticity_token"=>"fI4VZ4V0Go2Civo3sJz8Dv5/Wtaa90ynaYr+xxxx=", "action"=>"destroy", "controller"=>"devise/sessions"}
[02 Mar 01:45 10886 INFO] Redirected to https://ec2-xx-xx-106-255.us-west-2.compute.amazonaws.com/users/sign_out
[02 Mar 01:45 10886 INFO] Completed 301 Moved Permanently in 3ms
Started GET "https://stackoverflow.com/users/sign_out" for xx.xx.164.160 at 2012-03-02 01:45:42 +0000
[02 Mar 01:45 10886 FATAL]
ActionController::RoutingError (No route matches [GET] "https://stackoverflow.com/users/sign_out"):
Así que creo que tengo que empezar de cero. ¿Cuál es la forma más sencilla de hacer que cualquier ruta de Devise use https, pero el resto de las rutas de mi aplicación usan http? He intentado esto (del SO puesto en la parte superior):
#devise routes
scope :protocol => 'https://', :constraints => { :protocol => 'https://' } do
devise_for :users, :controllers => { :registrations => :registrations }
devise_for :admins
end
Pero no ir. Necesito una mejor sugerencia.