2016-06-30 27 views
0

我的頭標爲<%= csrf_meta_tags %>,但我手動創建了表單,因此authenticity_token隱藏字段未插入到我的表單中。手動添加真實性令牌,但未在後端驗證

所以我手動添加了authenticity_token

<input name="authenticity_token" value="<%= form_authenticity_token %>" type="hidden"> 

當我把我的網站的默認聯繫表(用戶未登錄)處理它應該驗證令牌和允許/拒絕請求的動作。但事實並非如此:我使用jQuery來清空字段並提交表單,但不會拋出錯誤或異常。

我得到這一行protect_from_forgery with: :exceptionapplication_controller.rb,並把它放在foo_controller.rb擴展application_controller,並具有響應聯繫表格的行動。

那麼我錯過了什麼?我需要做些什麼才能在後臺驗證此表單?

非常感謝!

+0

只要應用程序控制器擁有它,您不需要''foo_controller.rb'中的'protect_from_forgery::exception'。你的設置一般是正確的,但如果沒有你看到的表單/ JavaScript代碼,很難告訴你更多的信息,請添加它。 –

回答

0

當提交的身份驗證令牌丟失或與會話中的身份驗證令牌不匹配時,Rails將執行protect_from_forgery with:指定的操作,但請求處理未終止。會發生什麼事會被銷燬,所以請求被處理爲屬於未登錄的用戶。

這是一個很好的寫法,討論how protect_from_forgery works

如果不查看代碼很難說,但我會說你的表單提交代碼不會取得認證令牌輸入值,或者在請求發出之前它變得陳舊。後者可能發生在許多情況下,例如從瀏覽器緩存加載的頁面或用於與所討論的頁面並行登錄/註銷的瀏覽器標籤。

相關問題