为Rails 2中的所有页面设置ssl_allowed / ssl_required?

时间:2011-02-10 18:56:25

标签: ssl https ruby-on-rails-2

当页面使用SSL / HTTPS时,我发现AJAX调用无法在我的Rails站点上运行。我通过添加

解决了这个问题
ssl_allowed :action1, :action2, :actionN

与相关的控制人员。

我预见这将是一种痛苦,并且在将来容易出现错误,因为我无疑会忘记在ssl_allowed列表中添加操作。

对于我网站中每个控制器的所有操作,有没有办法在[ssl_requirement] [1] gem中全局启用ssl_allowed / ssl_required?我尝试将以下内容添加到ApplicationController,但这不起作用:

ssl_allowed :all

2 个答案:

答案 0 :(得分:2)

我在github(link)找到了grosser的ssl_requirement fork,它启用了“ssl_allowed:all”并用该版本替换了我的gem副本。现在我在我的ApplicationController中使用“ssl_allowed:all”,而不是其他地方。正是我想要的。

答案 1 :(得分:2)

如果您不想依赖分叉插件,可以覆盖ssl_allowed?在你的控制器中:

 class ApplicationController < ActionController::Base
    ...
    private

    def ssl_allowed?
       true
    end
 end

编辑:按照我的想法行事。它没有为未指定ssl_required的页面禁用重定向到http,而是短路,整个重定向过程不执行任何操作。这真是太糟了。代码:

 def ensure_proper_protocol
   return true if ssl_allowed?

   if ssl_required? && !request.ssl?
     redirect_to "https://" + request.host + request.request_uri
     flash.keep
     return false
   elsif request.ssl? && !ssl_required?
     redirect_to "http://" + request.host + request.request_uri
     flash.keep
     return false
   end
 end

添加ssl_allowed?如果代码改为:

,这样的方法只是答案
def ensure_proper_protocol
  if ssl_required? && !request.ssl?
    redirect_to "https://" + request.host + request.request_uri
    flash.keep
    return false
  elsif request.ssl? && !ssl_required? && !ssl_allowed?
    redirect_to "http://" + request.host + request.request_uri
    flash.keep
    return false
  end
end