ruby on rails - Forzar SSL usando ssl_requirement en la aplicación Rails 2
ruby-on-rails ruby-on-rails-2 (3)
Tengo una aplicación Rails que necesita ejecutarse bajo SSL. Intenté ssl_requirement pero parece que tengo que escribir todas las acciones en todos los controladores.
¿Hay algún método que pueda agregar un before_filter en el controlador de la aplicación con ssl_requirement, para que las aplicaciones se redirijan a https automáticamente cuando la solicitud del usuario está en http?
Gracias a todos. :)
El problema clave es que force_ssl.rb no se está cargando y que lib no está cargado por defecto en los carriles 3.1. Tienes que agregar
config.autoload_paths += %W(#{config.root}/lib)
config.autoload_paths += Dir["#{config.root}/lib/**/"]
a application.rb
Puede probar si la solicitud está en ssl o no en un filtro anterior en su aplicación
class Application < AC::Base
before_filter :need_ssl
def need_ssl
redirect_to "https://#{request.host}/#{request.query_string}" unless request.ssl?
end
end
Use un Middleware de Rack .
# lib/force_ssl.rb
class ForceSSL
def initialize(app)
@app = app
end
def call(env)
if env[''HTTPS''] == ''on'' || env[''HTTP_X_FORWARDED_PROTO''] == ''https''
@app.call(env)
else
req = Rack::Request.new(env)
[301, { "Location" => req.url.gsub(/^http:/, "https:") }, []]
end
end
end
# config/environment.rb
config.middleware.use "ForceSSL"