@Konboi memo

主に技術に関してつらつらと。

Railsのformでpostしようとしたらはまった。

<form method="post" section="hgoe/post">
  <input type="text" name="comment"> 
  <input type="submit" value="送信">
</form>

こんな感じのpostのフォーム。

コントローラー側では

  1. ポストを受けとる
  2. 他のサービスへ投稿する
  3. トップへ戻る

という、コードが書いてある。

こんな感じのいたって簡単なメソッド。
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 ポケットリファレンス
山田 祥寛
技術評論社
売り上げランキング: 137330