【问题标题】:Serving files over HTTPS dynamically based on request.ssl? with Attachment_fu基于 request.ssl 通过 HTTPS 动态提供文件?带附件_fu
【发布时间】:2010-11-26 04:44:21
【问题描述】:

我看到attachment_fu 中有一个:user_ssl 选项,它检查 amazon_s3.yml 文件以便通过 https:// 提供文件

在 s3_backend.rb 你有这个方法:

    def self.protocol
      @protocol ||= s3_config[:use_ssl] ? 'https://' : 'http://'
    end

但这会使其使用 SSL 服务所有 s3 附件。我想让它动态化,具体取决于当前请求是否使用 https:// 即:

  if request.ssl?
    @protocol = "https://"
  else
    @protocol = "http://"  
  end

我怎样才能让它以这种方式工作?我试过修改方法,然后得到 NameError: undefined local variable or method `request' for Technoweenie::AttachmentFu::Backends::S3Backend:Module 错误

【问题讨论】:

    标签: ruby-on-rails ruby ssl amazon-s3 attachment-fu


    【解决方案1】:

    问题在于您正在修改的方法 (Technoweenie::AttachmentFu::Backends::AWS::S3.protocol) 是静态的,无法访问相关文件或请求。您要修改的是Technoweenie::AttachmentFu::Backends::AWS::S3#s3_url(thumbnail)。您必须添加一个选项参数,以便您的控制器可以传入它是否需要 SSL,因为此模型级包不了解控制器级问题,如“当前请求”(也不应该)。

    不过,真正的答案是“您可能不想这样做”。如果客户说“我们有一个免费增值模式,其中只有我们的付费客户才能获得他们的照片的 SSL 传输”,您应该反驳:“实际上,削弱 SSL 文件传输更难,而且“可能只是在未来引入错误。让我们考虑提供另一种免费增值选项。”如果客户并不在意,您不妨为所有上传打开 SSL。

    【讨论】:

    • 我仍然遇到浏览器不希望在页面上显示图像的问题,如果它们通过 SSL 提供,而页面本身不是,将页面上的所有引用保持为“http”或全部因为“https”很好地解决了这个问题。
    • 迈克,这就是我要解决的问题。特别是关于 IE 7/8 安全警告错误...
    • 盖乌斯,谢谢,我试试看。
    【解决方案2】:

    这是一个需要正确解决的重大问题,或者其影响非常严重(特别是如果您不在 IE 中进行测试,错误和警告可能会从您身边溜走)。我的解决方案是将以下内容放入ApplicationController

    around_filter :set_attachment_fu_protocol
    
    def set_attachment_fu_protocol
      protocol = Technoweenie::AttachmentFu::Backends::S3Backend.instance_variable_get(:@protocol)
      Technoweenie::AttachmentFu::Backends::S3Backend.instance_variable_set(:@protocol, request.protocol)
      yield
    ensure
      Technoweenie::AttachmentFu::Backends::S3Backend.instance_variable_set(:@protocol, protocol)
    end
    

    此解决方案旨在具有以下属性:

    • 不需要修补 attachment_fu
    • 为每个请求设置 S3 后端的协议
    • 重置协议即使发生异常
    • 如果您从控制台运行,则保留默认的 :use_ssl 设置
    • 不需要 around_filter 是通用的,因为它总是在每次请求后将其重置为原始状态

    【讨论】:

      猜你喜欢
      • 2019-02-22
      • 2011-10-20
      • 1970-01-01
      • 2016-03-28
      • 1970-01-01
      • 2017-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多