1

我发现当页面使用 SSL/HTTPS 时,AJAX 调用在我的 Rails 站点上不起作用。我通过添加来解决这个问题

ssl_allowed :action1, :action2, :actionN

到涉及的控制器。

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

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

ssl_allowed :all
4

2 回答 2

2

我在 github (链接) 上找到了 Grosser 的 ssl_requirement fork,它启用了“ssl_allowed:all”,并用那个版本替换了我的 gem 副本。现在我在我的 ApplicationController 中使用“ssl_allowed :all”,而在其他任何地方都没有。正是我想要的。

于 2011-02-11T17:24:21.223 回答
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
于 2011-06-14T17:46:38.310 回答