419 Ошибка при попытке отправить на мой контроллер - PullRequest
0 голосов
/ 21 апреля 2019

Я пытался отправить запрос на отправку с помощью axios контроллеру моих проектов, и я получаю сообщение об ошибке 419 (неизвестный статус).Хотя я передаю CSRF через заголовки в контроллер.Когда я захожу во вкладку сети после публикации, она говорит:

X-CSRF-TOKEN: undefined
X-Requested-With: XMLHttpRequest

Однако, когда я console.log (window.csrf_token) возвращает токен.

Это включено в мой макет.blade.php

<script type="text/javascript">      
    window.csrf_token = "{{ csrf_token() }}"
</script>

Я определяю заголовки в своем app.js для vue:

const axios = require('axios');

axios.defaults.headers.common = {
    'X-CSRF-TOKEN': window.csrf_token,
    'X-Requested-With': 'XMLHttpRequest',
};

, а в моих проектах.vue вот мой пост-запрос axios:

Swal.queue([{
title: 'Add a New Project?',
input: 'text',
inputAttributes: {
    autocapitalize: 'on'
},
showCancelButton: true,
confirmButtonText: 'Create Project',
showLoaderOnConfirm: true,
preConfirm: (result) => {
    return new Promise(function(resolve, reject) {
        if (result) {
            console.log(result)
            axios.post('/api/projects', {title:result})
            .then(function(response){
                Swal.insertQueueStep({
                type: 'success',
                title: 'Your project has been created!'
                })
                resolve();
            })
            .catch(function(error){
                Swal.insertQueueStep({
                type: 'error',
                title: 'Something went wrong.'
                })
                console.log(error);
                reject();
            })
        }
    });
}
}])

, а также метод store в ProjectsController.php

    public function store()
    {
        $validated = request()->validate([
            'title' => 'required',
        ]);

        Project::create($validated);

        return response()->json($validated);
    }

1 Ответ

2 голосов
/ 21 апреля 2019

Скорее всего, вы устанавливаете токен CSRF в файле макета после использования, поэтому причина его получения не определена.

Попробуйте использовать способ по умолчанию, который заключается в добавлении тега meta в * 1004.* основного шаблона следующим образом:

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

Затем, чтобы использовать его, вы можете открыть указанный файл bootstrap.js, где этот код уже установлен:

window.axios = require('axios');

window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';

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');
}

Или, если это такне существует, вставьте его в app.js сценарий или в любое другое место на каждой странице.

...