在Rails 2应用程序中使用ssl_requirement强制SSL
我有一个需要在SSL下运行的Rails应用程序。 我尝试了ssl_requirement,但似乎我必须输入每个控制器中的所有操作。
是否有任何方法可以在应用程序控制器中使用ssl_requirement添加before_filter,以便当用户请求在http时,应用程序将自动重定向到https?
谢谢大家。 🙂
使用机架中间件 。
# 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"
您可以在应用程序的before_filter中尝试测试请求是否在ssl中
class Application < AC::Base before_filter :need_ssl def need_ssl redirect_to "https://#{request.host}/#{request.query_string}" unless request.ssl? end end
关键问题是没有加载force_ssl.rb,并且在rails 3.1中默认不加载lib。 你必须添加
config.autoload_paths += %W(#{config.root}/lib) config.autoload_paths += Dir["#{config.root}/lib/**/"]
到application.rb
- 如何在共享视图中禁用单页的Turbolinks?
- ruby on rails rspec错误
- 我可以做STI并仍然使用多态路径助手吗?
- ruby on rails第8章,第3版。 关于菜单下拉菜单
- 如何让Aptana(Eclipse)不遵循符号链接?
- 如何删除“DEPRECATION:stub! 已弃用。 改为使用存根。“消息?
- 引脚中的ActiveRecord :: StatementInvalid #index显示/app/app/views/pins/index.html.erb第4行引发:
- Ruby On Rails – 保护下载区域
- Rails,Ransack:如何在“所有”匹配中搜索HABTM关系而不是“任何”