Исключение Laravel TokenMismatch при отправке токена в заголовке


Я отправляю CSRF токен в заголовке при выполнении запроса ajax.

$.ajaxSetup({
    headers: {
        'X-CSRF-TOKEN': getCookie("XSRF-TOKEN")
    }
});

В приведенном выше коде я получаю токен из файла cookie "XSRF-TOKEN" и устанавливаю в заголовке "X-CSRF_TOKEN" глобально для всех запросов ajax.

Я проверил в инструменте разработчиков Chrome, что этот заголовок отправляется.

Но Laravel по-прежнему выдает Исключение tokenmismatch.

Примечание Я не могу получить токен из html, такого как мета-тег или поля ввода, потому что html содержимое кэшируется, поэтому я хотел бы установить файл cookie "XSRF-ТОКЕН", который laravel устанавливает в каждом ответе.

Author: Amarjit Singh, 2018-06-18

3 answers

Токен, сгенерированный Laravel csrf_token(), и токен, установленный в файле cookie, не совпадают.

Теперь проблема в том, что заголовок "X-CSRF-ТОКЕН" используется для отправки токена, сгенерированного функцией csrf_token().

Поэтому, если вы хотите отправить csrf-токен, полученный из файла cookie, вам следует использовать заголовок "X-XSRF-ТОКЕН".

Следовательно, приведенный выше код должен быть похож на

$.ajaxSetup({
    headers: {
        'X-XSRF-TOKEN': getCookie("XSRF-TOKEN")
    }
});
 1
Author: Harat, 2018-06-18 14:31:17

Попробуйте вместо этого сделать вот так: https://laravel.com/docs/5.3/csrf#csrf-x-csrf-token

Добавьте это в свой <head></head> внутренний файл блейда

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

И в вашем JS получите маркер следующим образом:

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

-- редактировать --

Вместо этого вы можете использовать поле ввода, если вы не хотите использовать тег meta и поместить его в свой <body></body>

<input type="hidden" name="csrf-token" value="{{ csrf_token() }}">

'X-CSRF-TOKEN': $('input[name="csrf-token"]').val()
 1
Author: H H, 2018-06-18 12:05:36

У меня такая же проблема, как у вас; возможно, этот ответ поможет..Похоже, что ваш токен csrf обновлен: https://stackoverflow.com/a/43893114/5586645

 0
Author: Roland Allla, 2018-06-18 12:12:10