私は起動時にAjaxコンテンツがロードされたLaravel 5.1アプリケーションを持っています。私は、ページの先頭にCSRFのmetaタグを配置しているCSRFトークンがLaravel 5.1で動作しない例外Ajax要求を伴うハンドラ
は:
<meta name="csrf-token" content="{{ csrf_token() }}" />
と私はjqueryのAjaxのリクエストでそれを使用します。
すべてが通常の状況下では完璧に動作します。
public function render($request, Exception $e)
{
if ($e instanceof NotFoundHttpException)
{
$foo = \App\Foo::foo();
return \Response::make(view("errors.404", compact("foo")), 404);
}
return parent::render($request, $e);
}
Handler.php
\アプリケーション\例外:私は、ファイルに404エラーハンドラを持って
VerifyCsrfToken.php
で TokenMismatchException:私は、以前のセッションせずに404エラーページを開いたときしかし、私のAjaxリクエストはエラーを取得しますこのエラーは、プライベートブラウザウィンドウを開いて、存在しないページへのURLで自分のサイトを開くことで繰り返すことができます。それはページリロードにとどまる。しかし、私が既存のページに行って404のURLをもう一度試してもうまくいきます。
どのようにこの問題を解決すればよいですか?
EDIT:
私は、複数のAjaxのリクエストをチェックしようと、すべての要求が異なるトークンを持つcomplitely別のセッションがあるようにそれはそう:リターン親の前にこれを追加するには、CSRFミドルウェアで
$request->session()->token();
Middleware \ VerifyCsrfToken.php関数tokensMatchはすでにトークンを取得しています。 $ token = $ request-> input( '_ token')?:$ request-> header( 'X-CSRF-TOKEN'); – Corrodian
はい、csrf_token()は値を返しています。ユーザーを別の404のURLにリダイレクトして、問題を回避することができました。ユーザーは元のURLを失うでしょう。私はそれをしなければならないと奇妙に思える。 – Corrodian