【发布时间】:2011-07-30 03:00:10
【问题描述】:
我的设置:Rails 3.0.9、Ruby 1.9.2
我的应用程序要求我的网站只有特定部分受 SSL 保护,其余部分不受 SSL 保护。如果有人认为这不是正常行为,请查看亚马逊。仅浏览产品时,它处于 HTTP 模式,在结帐时,它切换到 HTTPS。即使在安全结帐交易中,同一页面上还有其他几个仅 HTTP 链接。
我查看了 ssl_requirement gem 并决定不使用它,因为它不是满足我需求的完整解决方案。我最终设置了特定的 SSL 路由,例如
resources :projects do
resources :tasks, :constraints => { :protocol => "https" }
end
在我看来,对于 HTTP 特定链接
<%= link_to 'Projects', project_url(@project, :protocol => "http") %>
并处理 HTTPS 特定链接
<%= link_to 'Task', new_project_task_url(@project, :protocol => "https") %>
我知道这不是最干净的方法,但这是我决定要做的。此设置的问题是如何在每个页面上正确设置 HTTP 和 HTTPS 链接。有一个建议的解决方案here,但它需要将 _path 批量更改为 _url,如果可能的话,我更愿意避免这种情况。解决方案涉及在
中添加此方法application_helper.rb
module ApplicationHelper
def url_for(options = nil)
if Hash === options
options[:protocol] ||= 'http'
end
super(options)
end
end
所以我的问题是可以更改此方法或另一种方法以将 _path 调用更改为显式 url,以便我可以使用上述方法设置正确的协议。
【问题讨论】:
标签: ruby-on-rails https