Fuerza SSL usando ssl_requirement en Rails 2 App
-
27-09-2019 - |
Pregunta
Tengo una aplicación Rails que necesitan para funcionar bajo SSL. Probé ssl_requirement pero parece que tengo que escribir en todas las acciones en todos los controladores.
¿Hay algún método que puedo agregar un controlador de aplicación en before_filter con ssl_requirement, de modo que las aplicaciones se redirigir a https automáticamente cuando la petición del usuario se encuentra en http?
Gracias a todos. :)
Solución
Utilice un rack Middleware .
# 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"
Otros consejos
Se puede tratar de prueba si la solicitud está en SSL o no en un before_filter 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
El problema clave es que force_ssl.rb no está siendo cargado y que lib no se carga por defecto en los carriles 3.1. Hay que añadir
config.autoload_paths += %W(#{config.root}/lib)
config.autoload_paths += Dir["#{config.root}/lib/**/"]
para application.rb
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow