2016-03-08 3 views
1

Laravel 5,1Laravel исключение сайта «Осветите Session TokenMismatchException»

Я получаю эту ошибку иногда, чаще всего на войти на IE11, но иногда и на AJAX звонки тоже. У меня есть соответствующие поля csrf в моей форме регистрации, и я также добавил его в функцию AjaxSetup.

Я думаю, что это происходит с ajax, потому что пользователи через некоторое время возвращаются на страницу и пытаются использовать функцию после истечения срока их сессии.

Проблема IE11 меня смущает, так как они уже вышли из системы.

  1. Как я могу автоматически переадресовывать логин, когда функция ajax используется после окончания сессии?

  2. Что я могу сделать, чтобы IE11 не генерировал эту ошибку при попытке войти?

.

Error of type ERROR [03/02/2016 11:06 am]: exception 'Illuminate\Session\TokenMismatchException' on page /var/www/vendor/bootstrap/cache/compiled.php 
Stack trace: 
#0 [internal function]: Illuminate\Foundation\Http\Middleware\VerifyCsrfToken->handle(Object(Illuminate\Http\Request), Object(Closure)) 
#1 /var/www/vendor/bootstrap/cache/compiled.php(9585): call_user_func_array(Array, Array) 
#2 /var/www/vendor/bootstrap/cache/compiled.php(12961): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request)) 
#3 [internal function]: Illuminate\View\Middleware\ShareErrorsFromSession->handle(Object(Illuminate\Http\Request), Object(Closure)) 
#4 /var/www/vendor/bootstrap/cache/compiled.php(9585): call_user_func_array(Array, Array) 
#5 /var/www/vendor/bootstrap/cache/compiled.php(11555): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request)) 
#6 [internal function]: Illuminate\Session\Middleware\StartSession->handle(Object(Illuminate\Http\Request), Object(Closure)) 
#7 /var/www/vendor/bootstrap/cache/compiled.php(9585): call_user_func_array(Array, Array) 
#8 /var/www/vendor/bootstrap/cache/compiled.php(12698): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request)) 
#9 [internal function]: Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse->handle(Object(Illuminate\Http\Request), Object(Closure)) 
#10 /var/www/vendor/bootstrap/cache/compiled.php(9585): call_user_func_array(Array, Array) 
#11 /var/www/vendor/bootstrap/cache/compiled.php(12635): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request)) 
#12 [internal function]: Illuminate\Cookie\Middleware\EncryptCookies->handle(Object(Illuminate\Http\Request), Object(Closure)) 
#13 /var/www/vendor/bootstrap/cache/compiled.php(9585): call_user_func_array(Array, Array) 
#14 /var/www/vendor/bootstrap/cache/compiled.php(2982): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request)) 
#15 [internal function]: Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode->handle(Object(Illuminate\Http\Request), Object(Closure)) 
#16 /var/www/vendor/bootstrap/cache/compiled.php(9585): call_user_func_array(Array, Array) 
#17 [internal function]: Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request)) 
#18 /var/www/vendor/bootstrap/cache/compiled.php(9575): call_user_func(Object(Closure), Object(Illuminate\Http\Request)) 
#19 /var/www/vendor/bootstrap/cache/compiled.php(2254): Illuminate\Pipeline\Pipeline->then(Object(Closure)) 
#20 /var/www/vendor/bootstrap/cache/compiled.php(2237): Illuminate\Foundation\Http\Kernel->sendRequestThroughRouter(Object(Illuminate\Http\Request)) 
#21 /var/www/vendor/public/index.php(54): Illuminate\Foundation\Http\Kernel->handle(Object(Illuminate\Http\Request)) 
#22 {main} 

ответ

0

Вам не хватает токена CSRF для вашего запроса ajax, а также сообщений в форме. Обязательно включите маркер или для всех маршрутов в рамках промежуточного программного обеспечения веб-группы.

Вы можете достичь этого, создавая метатег в своем заголовке.

<meta name="csrf-token" content="{{ csrf_token() }}"/> 

и включить этот токен в свои вызовы ajax. (Ваш запрос ajax может выглядеть по-другому, но должен иметь _token в данных.)

var CSRF_TOKEN = $ ('meta [name = "csrf-token"]'). Attr ('content');

$.ajax({ 
    type: "POST", 
    data: {_token: CSRF_TOKEN, data:data}, 
    dataType: 'JSON', 
    url: "/check", 
    success: function(msg){ 
     //something... 
    }); 
}); 

и для сообщений о форме, которые вы можете включить в код ниже.

{{ csrf_field() }}

+0

Я получил это в моей голове '' Постараюсь изменения имени – Ethan22

+0

это не должно имели значение, потому что функция '...... *. – Ethan22

+0

Это не имеет значения, если имя соответствует. Вы проверяете формы, чтобы убедиться, что у них есть поле маркера? –

Смежные вопросы