Laravel 5, ajax, 500 Internal Server Error, TokenMismatchException в строке VerifyCsrfToken.php 46:

Я использую Laravel 5 с сообщением ajax в всплывающем предупреждении, и он дает мне ошибку «500 Internal Server Error», когда я проверил firebug, я обнаружил, что ajax возвращает страницу с ошибкой, говорящую «TokenMismatchException в VerifyCsrfToken.php строка 46: "

когда я комментирую App\Http\Middleware\VerifyCsrfToken , он работает нормально, но я предполагаю, что это не рекомендуется, я печатаю переменную _token и не пуст
почтовый индекс ajax:

  $('#demo_4').click(function(){ bootbox.prompt("What is your name?", function(result) { if (result === null) { alert("Prompt dismissed"); } else { // alert("Hi <b>"+result+"</b>"); $.ajax({ url: 'test', type: "post", data: {'name':result, '_token': $('input[name=_token]').val()}, success: function(data){ alert(data); } }); } }); }); 

Код маршрута:

 Route::post('test', 'AccountController@login'); 

код AccountController:

 <?php namespace App\Http\Controllers; use Input; use Request; use App\Http\Controllers; class AccountController extends Controller { public function login() { if (Request::ajax()) { $data = Input::all(); print_r($data); die; } } } 

Вы должны вставить эту строку в свою форму

 <input type="hidden" name="_token" value="<?php echo csrf_token(); ?>"> 

Или добавьте это в контроллер

 use Illuminate\Support\Facades\Session 

Включите отладчик и сообщите, что показывает отладчик Laravel5, чтобы говорить более подробно.

В вызове ajax добавьте это в параметр data :

 '_token':$('input[name=_token]').val() 

Или глобально добавить

 <meta name="_token" content="{!! csrf_token() !!}"/> 

И добавьте в нижний колонтитул:

 <script type="text/javascript"> $.ajaxSetup({ headers: { 'X-CSRF-Token' : $('meta[name=_token]').attr('content') } }); </script> 

UPD: к контроллеру

 use Input; use Request; class AccountController extends Controller { public function login() { // Getting all post data if(Request::ajax()) { $data = Input::all(); print_r($data);die; } } 

UPD2: попробуйте добавить это в свой основной макет

 <meta name="_token" content="{!! csrf_token() !!}"/> <script type="text/javascript"> $.ajaxSetup({ headers: { 'X-CSRF-Token' : $('meta[name=_token]').attr('content') } }); </script> 

Убедитесь, что ваш веб-сервер уже имеет доступ к записи в каталог сеансов, это может быть app/storage/framework/sessions/ . казнить

 rm -f {your_web_app}/storage/framework/sessions/* 

Перезагрузите веб-сервер.

В некоторых случаях проверяйте app/Http/Middleware/VerifyCsrfToken.php на метод tokensMatch с помощью этого кода:

 $token = $request->ajax() ? $request->header('X-CSRF-Token') : $request->input('_token'); return $request->session()->token() == $token; 

И проверьте файл javascript для этого:

 // CSRF protection $.ajaxSetup( { headers: { 'X-CSRF-Token': $('input[name="_token"]').val() } }); 

Я также столкнулся с аналогичной проблемой

Замените data: {'name':result, '_token': $('input[name=_token]').val()}, с data: {'name':result, '_token': "$('input[name=_token]').val()"},

Размещение двойных кавычек вокруг маркера решило мою проблему.