Ruby on rails Rails 3:确保用户使用https
我有一个运行在Heroku上的Rails 3应用程序,我还安装了一个SSL,并且可以正常工作。但是,我的用户仍然可以在没有https的情况下访问该站点。如何确保使用https访问所有URL 谢谢 编辑: 我已尝试将此添加到应用程序_controller.rbRuby on rails Rails 3:确保用户使用https,ruby-on-rails,ruby-on-rails-3,ssl,heroku,ssl-certificate,Ruby On Rails,Ruby On Rails 3,Ssl,Heroku,Ssl Certificate,我有一个运行在Heroku上的Rails 3应用程序,我还安装了一个SSL,并且可以正常工作。但是,我的用户仍然可以在没有https的情况下访问该站点。如何确保使用https访问所有URL 谢谢 编辑: 我已尝试将此添加到应用程序_controller.rb before_filter :redirect_to_ssl def redirect_to_ssl redirect_to url_for params.merge({:protocol => 'https://
before_filter :redirect_to_ssl
def redirect_to_ssl
redirect_to url_for params.merge({:protocol => 'https://'})
end
但是我收到了一个
错误310(net::ERR\u TOO\u MANY\u重定向)
错误。以下是我在一个网站上发布的答案
否则,您可以使用。您可能需要检查您是否已经在使用ssl。。。这对我们有用
before_filter :redirect_to_ssl
def redirect_to_ssl
redirect_to :protocol => "https://" unless (request.ssl?)
end
您可以在config/production.rb或application.rb中为您的生产环境使用一个配置设置
# Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies.
# config.force_ssl = true
这在我的Rails应用程序中很好地发挥了作用,无需编写额外的代码。在调用redirect之前,您应该检查可能存在的重复项。这显然是一个无限的重定向,因为你总是重定向。在filter redirect_to_ssl中,您应该首先检查它是否不是https。正确的?。上面的内容有一个更干净的解决方案。当我尝试使用ForceSSL解决方案时,它会使Heroku上的应用程序崩溃。@Zimbabao的评论是正确的。您总是重定向到https,即使您已经使用https!我尝试了Rack:SSL并成功了。但是,我想限制重定向的URL。例如:我有没有证书的myapp.com和有证书的myapp.heroku.com。我只想重定向到myapp.heroku.com上的SSL。thanksRack::SSL有一个
:exclude
选项。您会发现它正在阅读中间件代码。它接受lambda,如果lambda返回true,将跳过Rack::SSL。