gpt4 book ai didi

ruby-on-rails - 处理页面上 HTTP 和 HTTPS 链接的混合

转载 作者:行者123 更新时间:2023-12-04 06:28:27 24 4
gpt4 key购买 nike

我的设置:Rails 3.0.9、Ruby 1.9.2

我的应用程序只要求网站的特定部分受 SSL 保护,而其余部分则不需要。如果有人认为这不是正常行为,请查看亚马逊。当只是浏览产品时,它是 HTTP 模式,在结账时,它会切换到 HTTPS。即使在安全结帐交易的过程中,同一页面上也有几个其他链接仅为 HTTP。

我查看了 ssl_requirement gem 并决定不使用它,因为它不是满足我需求的完整解决方案。我最终设置了特定的 SSL 路由,例如

resources :projects do
resources :tasks, :constraints => { :protocol => "https" }
end

在我的 View 代码中,针对 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

所以我的问题是可以更改此方法或另一个方法来更改对显式 url 的 _path 调用,以便我可以使用上述方法设置正确的协议(protocol)。

最佳答案

你可以试试这个,虽然我不是 100% 确定它有效:

使用来自 stackoverflow 答案的建议更改

将此添加到 application_controll.rb:

class ApplicationController < ActionController::Base
def url_options
{ :host => request.host }.merge(super)
end
end

根据Docs它应该添加完整的 url 即使你使用 _path:

:only_path - If true, returns the relative URL (omitting the protocol, host name, and port) (true by default unless :host is specified).

关于ruby-on-rails - 处理页面上 HTTP 和 HTTPS 链接的混合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6876486/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com