feedが登録出来ない。addをクリックして、URLを入力するのだが

"You need to sign in to Fastladder

Please reload the browser and sign in again"

といったエラーが出る。

Fastladderを使って、5分でアンインストールした

すいません、これはaddフォームのバグです。ちなみに、OPMLのインポートフォームでもこの現象が起きているはずです。

どういうことかというと、Rails 2.0からのセキュリティ周りの拡張に起因します。Rails2.0ではprotected_from_forgenyとすると、POSTリクエストを送るときにセッションのトークンが含まれていない場合リクエストを拒否するようになって、これがFastladderでも有効にしてありました。で、Rails 2.0系でform_tagとかを使うとその辺よしなにやってくれるんですが、インターフェース部は大部分が本家Fastladderからの流用なのでその記述がなかった。そのため、addフォームからのリクエストが送られてきたときに不正なリクエストと判断してしまい、ログインしてくださいという、ユーザからしてみれば「??」なエラーメッセージになってしまっていました。

これはtrunk版では既に対応済みで、パッケージ版の0.0.3リリースに含めますが、差しあたっての対策としては、app/controllers/application.rbの以下の部分で

# Filters added to this controller apply to all controllers in the application.
# Likewise, all the methods added will be available for all controllers.

class ApplicationController < ActionController::Base
  include AuthenticatedSystem
  #protect_from_forgery こいつをコメントアウト
  helper :all # include all helpers, all the time

と、この機能を無効にしてやると、addやimportが出来るようになります*1

もともとmod_perlとSledgeで書いてるものをRailsで書き直したものなんで、多分この手のインターフェースとバックエンドの齟齬とか、Railsのお作法にのっとってないとかのバグはまだちらほらあるんだろうなぁ。早急にリファクタ作業に入りたいところです。

追記

と思ったけどOPMLのインポート出来なかった。formで送ってるパラメータとcontrollerが受けとってるパラメータが違うし。そういえば直した記憶あるなこれ*2

=== app/views/reader/index.rhtml
==================================================================
--- app/views/reader/index.rhtml        (revision 4072)
+++ app/views/reader/index.rhtml        (local)
@@ -392,7 +392,7 @@
                                <b>file</b> : <input type="file" name="opml" style="width:230px"> <input type="submit" value=" Upload " style="width:90px">
                        </form>
                        <form target="_blank" action="/import/fetch" method="post" enctype="multipart/form-data">
-                               <b>OPML URL</b> : <input type="text" name="opml_url" value="http://" style="width:280px"> <input type="submit" value=" Import from URL " style="width:90px">
+                               <b>OPML URL</b> : <input type="text" name="url" value="http://" style="width:280px"> <input type="submit" value=" Import from URL " style="width:90px">
                        </form>
                        <div style="float:left" class="discover_help">
                                <a href="/import/"><img src="/img/icon/new_window.gif" border="none"></a>

こんな感じです。あわわわ。テスト書こうテスト。はやくリリースしよう。

*1:社内でCSRFとかやられる心配がなければね!

*2http://code.google.com/p/fastladder/source/detail?r=23