Подтвердить что ты не робот

как исправить токен CSRF, не найденный на консоли

Как исправить токен CSRF, который не найден на laravel 5.4, я пытаюсь узнать vue js в laravel, но у меня ошибка в моей консоли "Тонер CSRF не найден", помогите мне исправить эту ошибку.

enter image description here

4b9b3361

Ответ 1

Вы можете добавить следующий метатег

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

Ответ 2

Если вы используете Vue, вот путь:

Vue.http.interceptors.push(function (request, next) {
request.headers['X-CSRF-TOKEN'] = Laravel.csrfToken;
next();
});

или же

<script>
window.Laravel = <?php echo json_encode([
    'csrfToken' => csrf_token(),
]); ?>
</script>

Ответ 3

  1) Откуда появилась эта ошибка?

Эта ошибка произошла из resources/js/bootstrap.js

2) Почему произошла эта ошибка?

см. ниже фрагмент, попытайтесь найти метатег имени csrf-token,  если токен найден, добавьте в качестве заголовков в axios http library.else show error

let token = document.head.querySelector('meta[name="csrf-token"]');
if (token) {
    window.axios.defaults.headers.common['X-CSRF-TOKEN'] = token.content;
} else {
    console.error('CSRF token not found: https://laravel.com/docs/csrf#csrf-x-csrf-token');
}

3) Что такое решение?

Промежуточное ПО VerifyCsrfToken проверит заголовок запроса X-CSRF-TOKEN.

Вы можете сохранить токен в метатеге HTML:

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

Он сгенерирует токен, как показано на рисунке:

enter image description here

Для запроса Ajax:

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

Для VueJS 2.0:

Vue.http.headers.common['X-CSRF-TOKEN'] = document.head.querySelector('meta[name="csrf-token"]').content;

узнать больше о токене CSRF: https://laravel.com/docs/5.8/csrf

Ответ 4

если вы используете

let token = document.head.querySelector('meta[name="csrf-token"]');

попробуйте использовать

let token = document.querySelector('meta[name="csrf-token"]');

По сути, ваш скрипт не может прочитать метатег с помощью csrf-токена, в этом случае это должно сработать.

Ответ 5

Когда вы используете JavaScript в вашем файле bootstrap.js, вы найдете эти строки

let token = document.head.querySelector('meta[name="csrf-token"]');
if (token) {
    window.axios.defaults.headers.common['X-CSRF-TOKEN'] = token.content;
} else {
    console.error('CSRF token not found: https://laravel.com/docs/csrf#csrf-x- 
    csrf-token');
}

Заменить document.head.querySelector('meta[name="csrf-token"]'); на $('meta[name="csrf-token"]').attr('content');

Было бы

let token = $('meta[name="csrf-token"]').attr('content');
if (token) {
    window.axios.defaults.headers.common['X-CSRF-TOKEN'] = token;
} else {
    console.error('CSRF token not found: https://laravel.com/docs/csrf#csrf-x- 
    csrf-token');
}

Это также решает запросы post-axios, когда у вас есть формы в компоненте vue.