Force_ssl / force回到http。最好的方法是什么?

时间:2012-03-03 23:36:02

标签: ruby-on-rails ruby-on-rails-3

我在用户和会话控制器中使用force_ssl。这非常有效。当我在这些控制器中的任何一个中执行操作时,我的浏览器将重定向到https。问题是,在用户重定向到https后,他们的浏览器将至少在使用相对URL时继续使用https。我宁愿用户将http用于应用程序中的其他页面。我已经提出了3种可能的策略来引导用户回到其他页面的http。

  1. 使用绝对网址而不是相对网址。使用此策略,我避免使用root_path之类的东西,而是使用root_url。我可以在应用程序控制器中设置default_url_options以使用http协议。这样,我的应用程序中的所有链接都将尝试引导用户返回http。他们总是可以手动在浏览器中将其切换为https,但我真的不在乎他们是否这样做。

  2. 写一个类似于https://gist.github.com/1040964的过滤器。我真的不喜欢这个,因为我必须重复我在应用程序控制器中强制执行哪些控制器/操作以及我使用force_ssl的特定控制器。

  3. 使用此插件https://github.com/bartt/ssl_requirement。这个插件看起来不错,因为如果我什么都不说的话,它会默认强制为http。强制ssl似乎与include force_ssl方法非常相似。这似乎是一个很好的解决方案,但如果有一个简单的方法可以在没有它的情况下做到这一点,我不想依赖插件。

  4. 我无法确定这三个选项中哪一个是最好的,我正在寻找指导。我也是Rails的新手,所以如果这些解决方案中的任何一个“糟糕”,请告诉我。如果还有其他我不知道的选项,请告诉我。

    哪种解决方案最好? (Rails 3.2)

1 个答案:

答案 0 :(得分:1)

最好是插件。该插件的源代码与您的要点中的代码非常相似。事实上,如果你不喜欢这个插件,你真正需要的就是这里的部​​分:

https://github.com/bartt/ssl_requirement/blob/master/lib/ssl_requirement.rb#L112

您可以将其改编为application_controller.rb或完全插入插件。

干杯。