Ошибка CSRF token mismatch в AJAX запросе в Laravel

Начиная работать с AJAX в Laravel, я сразу столкнулся с ошибкой «CSRF token mismatch«.

Видно, что POST запрос подвисает с ошибкой 419.

Эта ошибка означает, что отсутствует токен CSRF в тех данных, которые принимаются сайтом. Laravel работает с токеном CSRF, тем самым защищая сайт от подделки межсайтовых запросов. Подробности этого механизма можно прочитать в главе «CSRF-защита» русскоязычной документации Laravel. Там же можно найти, что этот токен нужен не только при работе с формами, но и при отправке запросов AJAX. Для этого в секцию head сайта нужно вписать такую строку:

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

Для отправки токена на сервер с AJAX запросом, нужно включить такую строку

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

В моем рабочем примере это выглядит так:

var nomer = $('#'+theId).attr('data-item');
var datasend = "product_id="+nomer+"&count=1";
$.ajax({
    type: "POST",
    headers: {
        'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
    },
    url: "/cart",
    data: datasend,
    success: function(response) {
 
    }
});

Вам понравиться

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *