0

我目前正在尝试找到一种方法来强制某些路由使用 http(更快,不需要安全性)并强制使用 https 访问更敏感的页面。我看到了这个问题的答案:Rails 3 SSL Deprecation,但它似乎不起作用。

我在根 url 周围添加了一个范围:

scope :constraints => { :protocol => 'http' } do
  root :to => 'site#index'
end

但是No route matches [GET] "/"当我尝试访问 localhost:3000 时,它只是抛出了错误。

有没有一种干净的方法可以在某些地方强制 http 并在其他地方强制 https(我可以force_ssl在我的控制器中使用,但是有没有force_http?)路由周围的范围看起来很干净,但它对我不起作用。我做错了吗?

这样的方法怎么样?

CONTROLLERS_THAT_REQUIRE_SSL = ['check_out']
def ensure_proper_protocol
  unless Rails.env.development? || Rails.env.test?
    if request.protocol["https"] && !CONTROLLERS_THAT_REQUIRE_SSL.include?(params[:controller])
      redirect_to "http://" + request.host + request.path
    end
  end
end
4

2 回答 2

0

不确定此博客是否对您有用:Always-On HTTPS With Rails behind an ELB 考虑到您正试图强制应用程序的某些部分使用 https,这也可能对您有用。SSL 要求。它在关于 SSL 要求的部分下的详细信息添加了一种声明性方式来指定某些操作应该只允许在 SSL 下运行。如果您想在 SSL 中指定整个控制器,然后调用ssl_exceptions

before_filter或者,您可以尝试通过执行类似的操作来编写 a

class ApplicationController < ActionController::Base
  before_filter do
    if request.ssl? || Rails.env.production? 
      redirect_to :protocol => 'http://', status => :moved_permanently
    end
   end 
 end 

希望这可以帮助

于 2013-08-29T19:22:15.890 回答
0

寻找答案后,它看起来并不存在,所以我创建了一个force_httpgem... :

安装它gem install force_http或者你可以在这里找到它:https ://github.com/EdmundMai/force_http 。您只需force_http像使用force_ssl. 本质上恰恰相反。我查看了源代码并将其配置为在 request.ssl 时重定向到 http:// 而不是 https://?

于 2013-09-06T21:02:02.087 回答