Railsのformでpostしようとしたらはまった。
<form method="post" section="hgoe/post"> <input type="text" name="comment"> <input type="submit" value="送信"> </form>
こんな感じのpostのフォーム。
コントローラー側では
- ポストを受けとる
- 他のサービスへ投稿する
- トップへ戻る
という、コードが書いてある。
こんな感じのいたって簡単なメソッド。
post_to_serviceはライブラリを使ってポストしてると
思っていただければと。
def post comment = params[:comment] post_to_service("#{comment}") redirect_to "/" end
一見なにも問題なさそうにみえるのだが、
なんど試しても上手くいかない。
Token: Write operations require an access token
っていうエラーがブラウザ上で表示されるので
APIの権限周りを疑って、いろいろやってみたものの。
どうも、それが原因では無いらしい。
そこで、ログをみてみると
なんとも気になるログが。
WARNING: Can't verify CSRF token authenticity Completed 500 Internal Server Error in 0ms
調べてみると、どうやらRailsではデフォルトで
CSRF対策がなされているらしい。
ここを読んでると
<input type="hidden" name="authenticity_token" value="<%= form_authenticity_token %>" >
こんな感じで authenticity_token をいれるといいらしい。
やってみたら問題なく通った。
分かればなんてことないけど、かなりはまった。
Ruby on Rails 3 ポケットリファレンス
posted with amazlet at 12.08.21