2015-07-10 2 views
1

У меня есть приложение laravel, которое выводит токен в поле на каждой странице. Затем jquery загружает токен в каждый запрос ajax, как указано здесь: Laravel 5 CSRF global token hidden field for all forms in a pageНеисправность маркера Laravel раз за разом

Но время от времени я получаю исключения TokenMismatch при вызовах ajax. Иногда это происходит, когда веб-сайт простаивает слишком долго, а иногда это по-видимому, случайным.

Любые идеи о том, как отладить это? Что может быть причиной этого или возможных решений?

ответ

0

Если вам нужно сделать запрос AJAX, выключение в VerifyCsrfToken промежуточное программное обеспечение на вашем Kernel.php файл.

Вы также можете редактировать свои VerifyCsrfToken.php промежуточного файла, чтобы исключить определенные URL, как таким образом:

/** * The URIs that should be excluded from CSRF verification. * * @var array */ protected $except = [ 'ajax/*', 'api/*', ];

0

я думаю, что вы не должны включить-выключить промежуточное VerifyCsrfToken на файл Kernel.php потому что это действие может предлагать атаки. на самом деле вам нужно защищать каждый запрос на вашем сайте с помощью токена (исключая случай внешнего сообщения на нашем сайте, например: пост состояния mandrill).

набор мета-тегов, как следует

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

затем запросить как следует

$.ajax({ 
    data: {data1:'data1',data2:'data2'}, 
    url: '/your/url/goes/here', 
    type: 'POST', 
    beforeSend: function (request) { 
     return request.setRequestHeader('X-CSRF-Token', $("meta[name='csrf-token']").attr('content')); 
    }, 
    success: function(response){ 
     console.log(response); 
    } 
}) 
+0

По-прежнему приходит ошибка – rahulsm

+0

, возможно, это связано с просроченным токеном, увеличивающим ограничение срока действия токена. –

0

Причина этого, скорее всего, один из следующих:

  1. Вы имеете простаивал слишком долго - по умолчанию токены CSRF действительны в течение 15 минут, я не ошибаюсь.

  2. Вы забыли передать токен на свой сервер. Это можно сделать, просто добавив заголовок X-CSRF-TOKEN к вашему запросу.

0

Добавить ниже html-код в ваш основной файл.

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

Всегда используйте приведенный ниже сценарий в своем файле JS или файле вида.

$.ajaxSetup({ 
    headers: { 
     'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') 
    } 
}); 
+0

По-прежнему приходит эта ошибка, иногда – rahulsm

+0

ставит ваш код на pastebin –

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