2011-12-12 71 views
2

我正在將Liberty Reserve購物車整合到我的Rails應用程序中。調用LR(使用fork提交)完美地工作,LR在成功發佈後也會重定向到我的頁面。但是當應用程序返回時,我的會話丟失了。Rails - 從提交(POST)返回後會話丟失

頁面看起來如下:

<form action="https://sci.libertyreserve.com/en" method="GET"> 
<input type="hidden" name="lr_acc" value="XXXXX"> 
<input type="hidden" name="lr_store" value="XXX"> 
<input type="hidden" name="lr_merchant_ref" value="1"> 
<input type="submit" value="Liberty Reserve"/> 
</form> 

方式LR的作品,是在用戶已成功預定了他的事務,LR重定向回我的網頁,但因爲會話變量都走了我的身份驗證失敗。

我認爲它與CSR應用程序所要求的CSRF-TOKEN有關,但LR顯然不提供。

我可以爲一個特定頁面/操作取消激活CSRF抓取還是有其他解決方法?

回答

6

我開始將Rails作爲Facebook應用程序並通過Koala Lib。我讀了某處關閉「防止發生危險」的功能

對於測試,您只需在您的ApplicationController中註釋掉protect_from_forgery,但只是爲了查看它是否適用於您。 類ApplicationController中<的ActionController :: Base的 #protect_from_forgery

如果這樣的作品,你可以嘗試破例爲您的特定控制器/ actionHere。 http://api.rubyonrails.org/classes/ActionController/RequestForgeryProtection/ClassMethods.html

要小心。這可能是更多需要處理的一個漏洞。 http://ruby.about.com/od/security/a/forgeryprotect.htm

+1

通過一些更多的信息讀取後, 「訣竅」是確保「外部」應用程序使用GET返回到我的網頁,而不使用POST,防止僞造是僅適用於POST的功能。 – KKK

+0

我已完全監督,您使用的是GET。很好,你已經找到了解決方案。 – vik

1

您是否使用表單標籤?

<%= form_tag do %> 
    Form contents 
<% end %> 

另一種觀點

<%= form_tag(c_add_path, method: 'post', enctype: 'multipart/form-data', style: 'text-align: left;') do %> 
    Form contents 
<% end %> 

這個標籤生成html與會話密鑰,所以你可以使用POST不失會議

http://guides.rubyonrails.org/form_helpers.html

+0

儘管沒有解決OP問題(OP並不控制爲POST請求提供表單的代碼),但這爲我解決了這個問題。我在登錄挑戰期間丟失了會話內容。我的新會話表單是用普通的HTML構建的,這意味着它不包含名爲「authenticity_token」的隱藏輸入。 POST中缺少真實性標記會重置我的會話。更改爲使用'form_tag'添加了缺少的隱藏輸入並解決了我的問題。謝謝@安德魯 –