【问题标题】:Simplest method of enforcing HTTPS for Heroku Ruby Sinatra app为 Heroku Ruby Sinatra 应用程序实施 HTTPS 的最简单方法
【发布时间】:2025-12-03 05:15:01
【问题描述】:

我有一个在 Heroku 上创建的应用程序,它是用 Ruby(不是 rails)和 Sinatra 编写的。 它托管在默认的 herokuapp 域上,因此我可以使用 HTTP 和 HTTPS 来寻址应用程序。 该应用程序请求我转发到 HTTPS 调用的用户凭据,因此转发部分是安全的。 我想确保我的用户始终安全地连接到我的应用,这样凭据就不会以明文形式传递。

尽管进行了大量研究,但我还没有找到解决这个简单要求的方法。

是否有一个简单的解决方案,无需将我的应用程序更改为 Ruby rails 或其他方式?

谢谢,

艾伦

【问题讨论】:

  • 你确定你做了很多研究吗??这应该会有所帮助 - devcenter.heroku.com/articles/ssl-endpoint
  • 感谢您的链接,但我已经阅读了该链接,但我看不出它有什么帮助。本文描述了如何在自定义域上启用 SSL,但正如我所说,我的应用程序在 herokuapp 域上运行。如果我错过了描述如何强制执行 HTTPS 的内容,请指出。下面 CodeGnome 提出的答案对我有用。

标签: ruby redirect heroku https sinatra


【解决方案1】:

在前置过滤器中重定向

这是未经测试的,但它应该可以工作。如果不是,或者如果它需要额外的改进,它至少应该给你一个合理的起点。

before do
  redirect request.url.sub('http', 'https') unless request.secure?
end

另见

【讨论】:

    【解决方案2】:

    我使用一个看起来像这样的助手:

    def https_required!
        if settings.production? && request.scheme == 'http'
            headers['Location'] = request.url.sub('http', 'https')
            halt 301, "https required\n"
        end
    end
    

    然后我可以将它添加到我想强制到 https 的任何单个路由中,或者在 before 过滤器中使用它来强制一组 url:

    before "/admin/*" do
        https_required!
    end
    

    【讨论】:

      最近更新 更多