簡體   English   中英

HTTP將多部分/表單數據從桌面客戶端發布到Rails

[英]HTTP Post Multipart/Form-Data to Rails from Desktop Client

我正在嘗試執行HTTP POST,以從我的Cocoa應用程序在Ruby on Rails應用程序中創建模型的實例。 我同時在編寫客戶端(Cocoa)和服務器(Rails),因此可以在任一位置進行更改。

我在使用“防止偽造”時遇到所需的身份驗證令牌問題

當我可以將HTTP POST的Content-Type設置為text / xml時,一切都很好,因為Rails將其路由到不需要身份驗證令牌的相應xml處理程序。 模型對象已創建,鏈接在一起並正確存儲。 甜。

我現在正在嘗試將文件上傳到服務器。 這需要我使用multipart / form-data Content-type。 該連接失敗,因為我未驗證身份驗證令牌。 因為我沒有發送xml POST,所以我需要進行身份驗證。 但是,我使用的台式機客戶端無法使用Rails中的漂亮表單幫助器。

解決此問題的適當方法是什么?

當我關閉“防止偽造”功能時,我的文件上傳HTTP POST可以正常工作,但這不是理想的解決方案。

謝謝傑夫

解決此問題的一種方法是在控制器中為此特定的上載創建單獨的操作。 然后,您可以在該控制器中聲明以下內容。

skip_before_filter :verify_authenticity_token, :only => :my_special_action

當然,這會將此上傳操作公開給遠程帖子提交。 但是,您只是想這樣做,不是嗎? 遠程提交一些東西。 因此,您無法防止遠程提交並同時使用它。 我有幾種解決方法。

  • API令牌。 如果您的上傳API僅用於桌面應用程序-您應該在桌面應用程序中分發一個令牌,該令牌已通過代碼在Rails端進行了驗證。
  • 如果您打算讓任何擁有自己應用程序的人發布到您的api,請讓他們請求令牌,以便您以后可以過濾掉垃圾郵件發送者。
  • 如果它是免費的,開放的,無令牌的訪問方式,那么應該可以解決一些垃圾問題。

PS另一種方法是,如果您的站點有帳戶,則需要對此操作進行基本身份驗證。

只是一個小解決方案,它可能適用於您的情況:

skip_before_filter :verify_authenticity_token, :only => :get_auth_token

生成令牌

然后通過XML調用發送回您的應用

然后將該令牌用作將來的參考。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM