protect_from_forgeryは今後デフォルトでprepend: falseに設定される

これは何

Railsアップグレードガイドのこちらの内容

結論

Railsを使っているとCSRF(クロスサイトリクエストフォージェリ)の対策のためにコントローラにprotect_from_forgeryを書く。(最近のRailsは書かなくてもデフォルトでやってくれる)
結論から書くと、例えば、Rails4時代にprotect_from_forgery with: :null_sessionとコントローラに書いていた場合、アップグレード後もRails4時代と同じ動作にしたい場合は、prepend: trueをつけて以下のように書けばいい。
protect_from_forgery prepend: true, with: :null_session
と書けば良い。

本題とずれるが、null_sessionの部分はいくつか指定ができて、null_sessionと書くとトークンが一致しない場合はセッションを空にする、という動作。
with: :exceptionと書くと、トークンが一致しない場合例外を発生させる。

詳細

本題とずれたが
Rails4において、コントローラに以下を記載すると

1.CSRF対策のためのトークンチェック
2.hogehogeという処理

という処理順序になるが、

Rails5でコントローラに同様の記載をすると
1.hogehogeという処理
2.CSRF対策のためのトークンチェック

という処理順序になる。

Rails4時代のように、常に最初にCSRFトークンチェックを行いたい場合、

と書く必要がある。

まとめ

・Rails5からはコントローラ中にbefore_actionなどのコールバックが先に定義されていると、コールバックが先に実行されるようになる
・prepend: trueをつけておくと、常に最初に実行される(=rails4と同じ動き)

参考

http://kamina-dev.hatenablog.com/entry/2017/12/15/091043

スポンサーリンク
スポンサーリンク
スポンサーリンク

シェアする

  • このエントリーをはてなブックマークに追加

フォローする

スポンサーリンク
スポンサーリンク