Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails 3:确保用户使用https_Ruby On Rails_Ruby On Rails 3_Ssl_Heroku_Ssl Certificate - Fatal编程技术网

Ruby on rails Rails 3:确保用户使用https

Ruby 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://

我有一个运行在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://'})
  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。