2012年01月17日

Ruby on Rails Rails3 link_toでputとdeleteしたらログアウト

link_toのputとdeleteでログアウト


これは何かというと、rails2からrails3にversionupしたら
いままで普通に動いていた
link_to hoge_path, :method => :delete

この削除リンクで、削除はできるが、削除した後にログアウトするという現象が発生した。

環境


ruby1.9.3
rails3.0.7

状況


link_toのputとdeleteで発生、getは問題なくpostは試していない。
form_tagのputとdeleteでは問題なく動作する。

原因


link_toとform_tagで何が違うのかよく見たところ
form_tagの場合は
<input name="authenticity_token" type="hidden" value="57NpCqL11bcGsEQNpnjjWqMxbRrqefq2fBMkjEf+4FI=">

このようなhiddenが入っていた。

これはrailsが自動的にCSRF対策を行い
params[:authenticity_token]とsession[:csrf_id]を比較して、同値であればOKというようにしているらしい。
というわけでこれをlink_toに持たせれば解決じゃね?と思い実行

解決策


authenticity_tokenはform_authenticity_tokenというメソッドで取得可能なので、
link_to hoge_path(削除したいitem, :authenticity_token => form_authenticity_token), {:method => :delete}

こんな感じで問題なく動作しました。

ただ、「railsのajax用のヘルパを使わずに、独自にjavascriptを書いてdbをいじる時は手動でauthenticity_tokenをいれてあげないといけません。」
という文をみつけたので、実はjavascriptとかそっちのほうの設定とかなんやらに問題があるのかも?

rails3のよく使うコマンドについて下記に書いてあります。
(サイトがめっちゃ重い時もあります;)
Ruby on Rails Rails3コマンド 〜よく使うコマンド〜
posted by RicK at 09:35| Comment(0) | TrackBack(0) | 日記