Несоответствие токена CSRF - PullRequest
0 голосов
/ 22 октября 2019

Я действительно расстраиваюсь из-за этой ошибки, у меня есть данные с пост-запросом ajax, но ошибочное несоответствие токена CSRF появляется редко. это моя пост-настройка jquery ajax

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

ajax:{
    "url": "trip/jsondata",
    "dataType": "json",
    "type": "POST",
    "data" : function ( d ){
        d.nState= $('#viewoption').val(),
        d.nYear  = $('#viewyear').val();
    }
},

Я не знаю, почему мой пост-запрос возвращает несоответствие токена CSRF, поэтому я изменил файл Illuminate \ Foundation \ Http \ Middleware \ VerifyCsrfToken, чтобы он возвращал значения токенов, как показано ниже.

public function handle($request, Closure $next)
{
    if (
        $this->isReading($request) ||
        $this->runningUnitTests() ||
        $this->inExceptArray($request) ||
        $this->tokensMatch($request)
    ) {
        return tap($next($request), function ($response) use ($request) {
            if ($this->shouldAddXsrfTokenCookie()) {
                $this->addCookieToResponse($request, $response);
            }
        });
    }

    $error='getTokenFromRequest :'.$this->getTokenFromRequest($request).' | X-CSRF-TOKEN :'.$request->header('X-CSRF-TOKEN').' | Session :'.$request->session()->token();
    throw new TokenMismatchException('CSRF token mismatch. err: '.$error);
}

Пытаюсь вернуть 3 переменные (getTokenFromRequest, X-CSRF-TOKEN и токен сеанса). И результат:

1008 * Сообщение: «CSRF токен несоответствие ERR: getTokenFromRequest: w0nxu5OPWZHFrBFqMtLsL3IWJ1vCg0VAGbCDt4c3 | X-CSRF-ЗНАК:. w0nxu5OPWZHFrBFqMtLsL3IWJ1vCg0VAGbCDt4c3 |Сессия: CiMUsbN9BumKIElvrOzJX8TnCA8UeuAAaLzbfZTO"

Вы можете видеть, что между X-CSRF-TOKEN с токеном сеанса есть различие, я не знаю почему?

Тогда я пытаюсьпроверьте в папке storage \ framework \ session, там два файла. enter image description here

Первый файл заполнен следующим образом a: 7: {s: 6: "_ token"; s: 40: "w0nxu5OPWZHFrBFqMtLsL3IWJ1vCg0VAGbCDt4c3";

Второй файл заполняется следующим образом: a: 2: {s: 6: "_ token"; s: 40: "CiMUsbN9BumKIElvrOzJX8TnCA8UeuAAaLzbfZTO";

Anyoneможет помочь, что происходит в моем приложении? нормально ли иметь 2 сеанса одновременно с другим токеном?

...