前回はセッションとキャッシュ周り
今回はPOST送信時の画面遷移でCSRFフィルタに引っかかってエラーになるようだった
やったことは以下の2点
- フォームテンプレート+CSRFフォームフィールドを追加
- リクエストヘッダを追加
順番に。
1つ目。
フォームテンプレート+CSRFフォームフィールドを追加
これは単純で
<form action="/pick1" method="POST">
となっていたものを
@form(routes.PickController.pick()) {
に変更。直下にCSRF用のフォームフィールドを追加
結果としてこうなる
@form(routes.PickController.pick()) { @CSRF.formField
これだけだとエラーになってしまったので、調べてみるとリクエストヘッダが必要と。
2つ目。リクエストヘッダを追加
これは各テンプレート(htmlファイルとか)の先頭とかに書いている@()
の後ろに(implicit req: RequestHeader)
を追加する
これでリクエストヘッダの情報と合わせてCSRFトークンチェックとかはフレームワーク側でやってくれるのであんまり気にしないで良くなったはず。