【问题标题】:Getting Rails URL helpers to automatically output https urls让 Rails URL 助手自动输出 https url
【发布时间】:2011-07-14 21:02:46
【问题描述】:

我正在开发一个大量混合 http 和 https 的网站 - 使链接使用正确的路由协议的最佳/最简单的方法是什么 - 可以在路由文件中指定吗?

假设我在 Rails 3 中有以下路线。

match "/test" => "test#index", :as => :test, :constraints => { :protocol => 'https' }

如果我在 http 页面上,并且我使用 test_url(),它将输出 http://domain.com/test。我想要https://domain.com/test

我知道我可以使用test_url(:secure => true),但这是重复逻辑。

我知道我可以将http://domain.com/test 转换为https://domain.com/test,但这是一个额外的重定向,而且它在表单帖子中失败。

想法?

【问题讨论】:

  • 我想你可以从以下问题中找到解决方案,stackoverflow.com/questions/3993651
  • 我不知道为什么这在 Rails 中如此困难。当然大多数网站都使用 HTTPS 进行登录等?

标签: ruby-on-rails ruby ssl routes


【解决方案1】:

test_url(:protocol => 'https') 用于 https 网址。

【讨论】:

  • “我知道我可以使用 test_url(:secure => true),但这是重复逻辑。”
【解决方案2】:

尚未尝试,但将其添加到您的ApplicationController

def default_url_options(options={})
 { :secure => true }
end 

【讨论】:

  • 这是一个混合了 http 和 https 的网站,但我认为这会使所有的 URL 都变成 https(对吗?)
  • 是的,你是对的,所以你应该只把它放在有 https 的控制器中
  • 仍然不确定这对我有什么帮助。如果我在一个 http 页面上,我希望 test_url() 返回一个 https URL,而不是一个 http。
  • 好的,很抱歉。备注:给试图帮助你的人 -1 不会为你的事业服务。
  • 可能事情发生了变化,这在 5.1.4 中不再有效。见stackoverflow.com/a/48781000/474597
【解决方案3】:
def default_url_options(options={})
 { :protocol => "https" }
end

【讨论】:

  • 虽然这段代码可能有助于解决问题,但它并没有解释为什么和/或如何回答问题。提供这种额外的背景将显着提高其长期价值。请edit您的答案添加解释,包括适用的限制和假设。
【解决方案4】:

对于 Rails 3.2,我结合了@apneadiving 的答案。将以下代码添加到我的 ApplicationController

def default_url_options(options={})
  options.merge{ :protocol => "https" }
end

【讨论】:

    【解决方案5】:

    【讨论】:

      【解决方案6】:

      Rails 3 SSL routing redirects from https to http 很好地回答了这个问题。简而言之,没有一个很好的方法来做到这一点。我提交了以下 Rails 错误:https://github.com/rails/rails/issues/3571

      【讨论】:

        【解决方案7】:

        要生成 https url,请添加一个名为协议的选项,其值为 https

        test_url(protocol: 'https')
        

        【讨论】:

          【解决方案8】:

          您可以使用一个名为 ss_requirement 的插件,它会为您提供类似的方法 ssl_required ssl_allowed

          您可以简单地将其添加到您的控制器中,以在任何操作上启用或禁用 https

          ssl_allowed :login, :update_profile
          

          https://github.com/rails/ssl_requirement

          【讨论】:

          • 这与生成 URL 无关。
          • 在这种情况下,您可以正常生成您的 url,但是对于您提到的方法,它是作为 SSL 提交的
          • 不,不是。它将http post从http重定向到https,丢失post数据。
          猜你喜欢
          • 2012-12-07
          • 2015-08-27
          • 1970-01-01
          • 2020-11-11
          • 2011-04-21
          • 1970-01-01
          • 2014-08-05
          • 2020-12-01
          • 2012-03-07
          相关资源
          最近更新 更多