Laravel5のCSRFトークンの使い方いろいろ

 ## HTMLタグとしてhiddenのinputフィールドごと出力

csrf_field();


というような感じで出力されます。

CSRFトークンのみを出力

csrf_token()

“0nB8DKkk882NYOGSIzxvd5aPfxtMaFwV7w3LJ2K6″そのものを出力します。Ajax利用時にmetaタグに埋め込む際などに使います。

session

とはいえ、この値は結局のところセッションに格納されています。リクエストから取得する場合は、

$request->session()->get('_token')

ファサードをとおして取得する場合は、

use Session;
....
$_token = Session::get('_token');

トークンの初期化

例えばログインしてからすぐに別の入力のフォームがあるような場合、フォーム入力を連続して2つ通ることになります。その際にCSRFトークンは同じセッション内と勘違いして同じ値を自動的に設定します。Laravelの便利なあのバリデーション機能はこのトークンを見ている、つまり同じセッション内で処理をしています。
Laravelのリクエストはすなわちセッションといっても過言ではないので、フォームで入力された値はリクエストに蓄積することができるというわけです。これが便利なのか不便なのかよくわからないといったところはありますが、総合的に考えるとこれは便利なのかもしれません。
ですが、場合によっては、このトークンを初期化しなくてはならない場合があります。

$request->session()->regenerateToken();

でトークンを初期化できます。余談ですが、

$request->session()->flush();
$request->session()->regenerate();

というやり方はだめでした。

Last update: 2018.05.15 (火)