HTTP从桌面客户端发布Multipart / Form-Data到Rails

时间:2009-08-13 15:54:57

标签: ruby-on-rails cocoa http

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

我遇到使用Protect For Forgery时需要的身份验证令牌的问题

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

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

解决这个问题的方法是什么?

我的文件上传HTTP POST在我关闭Protect For Forgery时工作正常,但这不是一个理想的解决方案。

谢谢, 杰夫

2 个答案:

答案 0 :(得分:0)

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

skip_before_filter :verify_authenticity_token, :only => :my_special_action

当然,这会将此上传操作公开给远程帖子提交。但你正试图这样做,不是吗?远程提交的东西。因此,您无法保护远程提交并同时使用它。我可以通过几种方式看到它。

  • API令牌。如果你的 上传API仅供使用 使用您的桌面应用程序 - 您应该 有一个随桌面分发的令牌 应用程序,您的代码在rails侧验证。
  • 如果你打算让任何人拥有 他们自己的应用程序发布到您的api, 让他们请求一个令牌,以便您以后过滤垃圾邮件发送者。
  • 如果它是免费的开放令牌访问权限, 然后你应该没关系一些垃圾 将通过。

P.S。另一种方法是,如果您的网站有帐户,则需要对此操作进行基本身份验证。

答案 1 :(得分:0)

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

skip_before_filter :verify_authenticity_token, :only => :get_auth_token

生成令牌

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

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