noir-middleware/app-handler を使って Invalid anti-forgery token でハマるとき
Web Development with Clojure の第 5 章くらいでハマる。
このエラーの文言で CSRF だなってことは簡単にわかるんだけど、解決するのに少し悩んだ。
古いバージョン( 0.8.2 当時)の lib-noir だと ring を直接使っていたので、 ring/ring-anti-forgery が依存性に含められていなかったんだけど、 0.9.0 にするタイミングで ring/ring-defaults を依存性に含めたので書籍通りにやろうとするとエラーに遭遇するわけですね。
でまぁ、これの解決方法は書籍のヘルプページにもあって以下の通りなんだけど
(use 'ring.util.anti-forgery) (anti-forgery-field)
Pragmatic Forums | Invalid anti-forgery token on guestbook app
ring.util.anti-forgery を require/use して form-to に (anti-forgery-field) って書くといいよって話なんだけど、疑問だったのは何故 lib-noir がそれを解決してくれないんだっていう話で、 ring/ring-anti-forgery は暗黙的に lib-noir で使われているものでエンドユーザーがそれを意識しないといけないのはおかしいんじゃない?と思ったので PR 投げた。 merge された。
ので、今後はこういうふうにかけます。
(use 'noir.util.anti-forgery) (anti-forgery-field)
とまぁこんな感じ :)
追記
初の OSS への Contribution でした。