Categories
open all | close allTags
カテゴリ | 名称 | rake | タグ | CSRF | 認証 | Subversion | 国際化 | パソコン | JustPosted | Flash | RESTful | フォーム | デュアル・コア | テスト | ドキュメント | Aptana | スキンエンジン | rubygems | MigrationSearch
原因究明>泣きたくなった【追記あり】
InvalidAuthenticationToken問題の解決がやっと見えてきました。簡単なサンプルプログラムを作って,そこでの動作といちいち比較するというかなりしんどいデバッグでした。問題点の一つはコントローラでlink_toをしているところ。実はコントローラではlink_toはサポートされておらず,ビューにしかこのメソッドはありません。で,自分でも忘れていたのですが,これを「self.class.helpers」にdelegateで渡すといった記述をしていました。ところが,これだとビューはビューでも新しいビューを作ってそれに渡すことになり,そこでコントローラとの連携が切れてしまっていたのでした。デバッグ中に調べていくとコントローラの@templateというインスタンス変数がビューを格納していたので,それに渡すように変更しました。
次に,それでも途中で,CSRF対策機能を使うかどうかをチェックするprotect_against_forgery?というメソッドが何も実行しないで返ってきてしまう。これにすごく悩んだのですが,実はこれも自分のせいであることが判明。ヘルパーになぜかこの名前のメソッドを作っており,中身が空っぽだったのです。きっと,自分で代わりになる機能を入れようとか考えていたのだろうと思うのですが全く記憶にありませんでした。中身が空のメソッドはデバッガが飛ばしてしまうため,そこに行っていることに気付きませんでした。プロジェクト内に検索をかけてようやく発見。
これだけでおおよそ4時間。疲れました。しかも全部自分のせいだし…
これでほかのところも動いてくれるといいのですが。
【追記】
これでほかのフォームにもCSRF対策用のフィールドが自然に入るようになりました。こりゃ確かに検索しても原因が分からないのは当然です。今後の作業は大分スムーズになるのではないかと思います。
Comments
No comments yet. You can be the first!