爲了解釋camwest的回答中更詳細一點:
當你做一個AMF請求,比方說,articles_controller
,update
行動,請求實際上並沒有去直接在控制器和動作。這個AMF請求(這是一個POST請求)實際上通過Rails路由器到達rubyamf_controller
,gateway
動作(AMF終點)。目標控制器和操作(articles_controller
,update
動作)被標記爲此POST請求的參數。
在此POST調用中設置的mime_type
是amf
。 RubyAMF插件將此mime_type
添加到未檢查僞造保護的mime_types列表中。因此,即使沒有authenticity_token
,對rubyamf_controller
,gateway
操作的調用也會成功執行。
從Flex中,您可能已將一些參數發送到articles_controller
,update
操作。這些作爲序列化的AMF對象到達gateway
操作。這些參數在這裏反序列化。
gateway
動作然後在內部調用目標控制器和動作(articles_controller
,update
動作)。目標行動做它的東西,並返回一個響應。 gateway
操作獲取此目標操作的響應,將其序列化爲AMF並將其發送回客戶端。
在Rails 2.x中,這個內部調用沒有調用僞造保護機制。因此,即使您沒有將authenticity_token
作爲參數之一發送到目標操作,也可以正常工作。
這在Rails 3中發生了變化。即使是內部調用也會調用僞造保護機制。目標操作檢查是否存在authenticity_token
參數。所以,你需要從Flex發送它。
這裏更多:http://anjantek.com/2011/05/08/rails-3-rubyamf-flex-csrf-solution/
僞造保護是由控制器作爲的before_filter發射了,不應該的問題,如果路由器被稱爲與否 – 2010-03-06 19:54:17