Я получаю случайные значения TokenMismatchExceptions в Laravel 5. Используя следующий код в функции tokensMatch()
я пытался отладить эту странную проблему:
Log::debug($request->session()->token(). ', ' . $token);
Вывод выглядит следующим образом:
[2015-03-21 17:04:22] local.DEBUG: XJhAXXQumM0JLX9tFcQn1tQZMI1FtglDFuhi8abT, XJhAXXQumM0JLX9tFcQn1tQZMI1FtglDFuhi8abT [2015-03-21 17:04:34] local.DEBUG: XJhAXXQumM0JLX9tFcQn1tQZMI1FtglDFuhi8abT, XJhAXXQumM0JLX9tFcQn1tQZMI1FtglDFuhi8abT [2015-03-21 17:04:36] local.DEBUG: snE0IERJ1VY0o4qmSMuHb4wH9lhQUf5ZtVObOFnR, XJhAXXQumM0JLX9tFcQn1tQZMI1FtglDFuhi8abT [2015-03-21 17:04:36] local.ERROR: exception 'Illuminate\Session\TokenMismatchException' in vendor\laravel\framework\src\Illuminate\Foundation\Http\Middleware\VerifyCsrfToken.php:47 Stack trace: [...] [2015-03-21 17:07:30] local.DEBUG: XJhAXXQumM0JLX9tFcQn1tQZMI1FtglDFuhi8abT, XJhAXXQumM0JLX9tFcQn1tQZMI1FtglDFuhi8abT
Как вы можете видеть, первые 2 запроса преуспевают, третий – неудачный, а четвертый – снова. Я использую сетевые инструменты Fiddler и Chrome, и я могу подтвердить, что точно такие же данные были отправлены на сервер для всех запросов.
Таким образом, на стороне сервера появляются изменения токена. Странно то, что токен в файле сеанса, похоже, не меняется, и неправильный токен всегда является строкой, которую я раньше не видел, но всегда возвращается к исходной строке каким-то образом.
Это случается довольно часто, так что это действительно раздражает. Сначала я подумал, что это может быть что-то вроде драйвера сеанса базы данных, но теперь я использую драйвер файла, и это все еще происходит.
Обновить
У меня такая проблема. Я использую его на разных компьютерах и разных проектах, используя php artisan serve
. Я также использую его на разных серверах и разных проектах (nginx 1.6.2, PHP 5.6.7).
Я не единственный с этой проблемой .
Это довольно сложно отлаживать, поскольку это происходит случайным образом, иногда оно не появляется некоторое время, а затем внезапно это происходит много раз подряд или только один раз. Просто повторно отправляя запрос POST, он иногда работает снова или иногда приводит к другому исключению.
Единственное, что я добавил к composer.json
во всех проектах, – "illuminate/html": "5.*"
. Все пакеты композиторов актуальны.
Я обновлю этот вопрос, как только у меня появится дополнительная информация об этой действительно странной проблеме.
Еще одно обновление
Я создал новый проект L5 и добавил минимальный код для воспроизведения этой ошибки. Изменения, которые я сделал, можно увидеть здесь (вместе с полным тестовым проектом). Я попробую отладку с этим проектом сейчас.
Это известная проблема с Laravel 5 для некоторых людей.
Существует открытый билет на выпуск Github по этой теме: https://github.com/laravel/framework/issues/8172
Причина еще не известна, и она продолжается некоторое время. В нем много умных людей, но кажущаяся случайность проблемы затрудняет отладку.
Я предлагаю вам внести свою информацию в этот билет и заглянуть туда для получения дополнительной информации.