2013-07-23 30 views
0

我有一個有趣的挑戰來解決舊的Rails 2.0.2應用程序(在更新到Rails 4的過程中,但我不能等那麼久解決這個問題)。問題是這樣的:我們即將分發離線內容,目的是最終將用戶上網到我們的網站。在從離線狀態轉爲在線狀態時,他們會在離線狀態下填寫表單,但我們希望能夠將數據發佈到表單的在線版本,而無需用戶將表單填寫兩次。我看到的問題是如何處理在線版本中更改的真實性令牌。任何人對我們如何解決這個問題都有任何建議。我瞭解真實性令牌的目的是爲了防止我正在嘗試做的事情,但是我能否解決它,例如,通過某種方式預先在線版本中使用脫機版本的數據進行預填充?我不認爲我可以複製當前正在運行的真實性令牌/會話對,除非我能以某種方式將相同的session_id寫入聯機表單域的cookie中?或者,也許我必須解決它的服務器端?我試圖避免爲這個問題設置自定義代碼服務器端... 感謝您提前做出任何迴應。Rails - 繞過真實令牌

回答

1

除了在發佈到在線表格,GET在線表格和預填充字段使用查詢字符串

例如,離線形式名字和姓氏會,提交時,執行GET請求如下:

mysite.com/offline_form/new?first_name=Dick&last_name=Steele 

此URL將呈現活new形式,完成一個有效的CSRF令牌。使用查詢字符串來填充輸入字段。查詢字符串可以通過params[]訪問。

form_for :online do |f| 
    f.text_field :first_name, value: params[:first_name] 
    f.text_field :last_name, value: params[:last_name] 
    # ... 
end 

這樣,您的用戶可以提交一個現場CSRF標記化表單,而無需填寫第二個表單。至少,您的用戶將不得不點擊兩個提交按鈕。您可以將表單的在線版本作爲確認步驟提供。

+0

謝謝gg_s! GET'ing工作,我添加了jQuery(「#form」)。submit()來自動提交表單 – Craig

相關問題