【问题标题】:HTTP Post Multipart/Form-Data to Rails from Desktop ClientHTTP 将 Multipart/Form-Data 从桌面客户端发布到 Rails
【发布时间】:2009-08-13 15:54:56
【问题描述】:

我正在尝试执行 HTTP POST 以在我的 Cocoa 应用程序中的 Ruby on Rails 应用程序中创建模型实例。我正在编写客户端(Cocoa)和服务器(Rails),因此我可以在任一位置进行更改。

我遇到了使用 Protect From Forgery 时所需的身份验证令牌的问题

当我可以将 HTTP POST 的 Content-Type 设置为 text/xml 时,一切都很好,因为 Rails 将其路由到不需要身份验证令牌的适当 xml 处理程序。模型对象被创建、链接在一起并正确存储。甜蜜。

我现在正在尝试将文件上传到服务器。这需要我使用 multipart/form-data 内容类型。此连接失败,因为我的身份验证令牌未验证。因为我没有发送 xml POST,所以我需要进行身份验证。但是,我使用的桌面客户端无法使用 rails 中漂亮的表单助手。

解决此问题的适当方法是什么?

当我关闭“防止伪造保护”时,我的文件上传 HTTP POST 工作正常,但这不是一个理想的解决方案。

谢谢, 杰夫

【问题讨论】:

    标签: ruby-on-rails cocoa http


    【解决方案1】:

    解决此问题的一种方法是在控制器中为此特定上传创建单独的操作。然后您可以在该控制器中声明以下内容。

    skip_before_filter :verify_authenticity_token, :only => :my_special_action
    

    当然,这会将这个上传操作暴露给远程提交。但你正试图这样做,不是吗?远程提交东西。所以你不能同时保护远程提交和使用它。我有几种方法可以解决这个问题。

    • API 令牌。如果你的 上传 API 仅供使用 使用您的桌面应用程序 - 您应该 有一个随桌面分发的令牌 由您的代码在 Rails 端验证的应用程序。
    • 如果您打算让任何人 他们自己的应用程序发布到您的 api, 让他们请求令牌,以便您稍后过滤垃圾邮件发送者。
    • 如果它是免费开放无令牌访问, 那你应该没问题 会通过的。

    附:如果您的网站有帐户,另一种方法可能是要求对此操作进行基本身份验证。

    【讨论】:

      【解决方案2】:

      只是一个小解决方案,它可能适用于您的情况:

      skip_before_filter :verify_authenticity_token, :only => :get_auth_token
      

      生成令牌

      然后通过 XML 调用发送回您的应用

      然后将该令牌用于将来的引用。

      【讨论】:

      • 这基本上是我所做的,除了我实际上为每次上传拉下身份验证令牌并且仍然需要验证。
      猜你喜欢
      • 1970-01-01
      • 2018-12-31
      • 1970-01-01
      • 2018-08-03
      • 2021-08-10
      • 2020-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多