2016-04-28 17 views
1

私は起動時に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(); 

答えて

0

を::扱います($要求、次の$):

if($request->ajax()) 
{ 
    \Input::merge([ 
     '_token' => $request->header('X-CSRF-Token') 
    ]); 
} 

編集: は、その404ページのcsrf_token()を返すものですか?私は興味深いsthを見つけたhere。あなたの問題に似ています。

+0

Middleware \ VerifyCsrfToken.php関数tokensMatchはすでにトークンを取得しています。 $ token = $ request-> input( '_ token')?:$ request-> header( 'X-CSRF-TOKEN'); – Corrodian

+0

はい、csrf_token()は値を返しています。ユーザーを別の404のURLにリダイレクトして、問題を回避することができました。ユーザーは元のURLを失うでしょう。私はそれをしなければならないと奇妙に思える。 – Corrodian

関連する問題