У меня есть фреймворк Laravel с VueJS в качестве интерфейса. Этот интерфейс размещен на локальном сервере xampp на портах 80 443 с настроенным URL-адресом "http://test.net". Я отправляю запросы API из приложения VueJS, используя axios, на бэкэнд Django, где я установил рабочую структуру Rest (доступную через Postman). Внутренний сервер - http://127.0.0.1:8000. Поскольку серверы разные, я установил пакет django-cors-headers и настроил файл settings.py, чтобы включить этот пакет, а также включить промежуточное ПО, как показано в документации.
Это запрос axios от Vue:
let url = "http://localhost:8000/leadmanager/api/lead/";
axios.get(url)
.then(res => console.log(res.data))
.catch(error => console.log(error));
Изначально у меня возникла такая ошибка:
Доступ к XMLHttpRequest по адресу 'http://localhost:8000/leadmanager/api/lead/ 'from origin' http://test.net 'заблокирован политикой CORS: ответ на запрос предварительной проверки не пройти проверку контроля доступа: на запрошенном ресурсе отсутствует заголовок Access-Control-Allow-Origin.
Итак, я проверил документацию и установил django-cors-headers и включил URL-адрес веб-сайта Laravel в CORS_ORIGIN_WHITELIST.
CORS_ORIGIN_WHITELIST = [
"http://test.net"
]
После этого я получаю другую ошибку. Я подозревал, что это происходит из-за того, что Laravel по умолчанию прикрепляет заголовки x-csrf-token к отправляемым пакетам.
Доступ к XMLHttpRequest по адресу 'http://localhost:8000/leadmanager/api/lead/ 'from origin' http://test.net 'заблокирован политикой CORS: поле заголовка запроса x-csrf- токен не разрешен Access-Control-Allow-Headers в предпечатном ответе.
Чтобы разрешить запросы с x-csrf-tokens, я попробовал следующие настройки для django-cors-headers в settings.py:
CORS_ALLOW_HEADERS = [
'x-csrftoken'
]
CSRF_TRUSTED_ORIGINS = [
'http://test.net'
]
Итак, как мне настроить бэкэнд Django, чтобы разрешить запросы от Laravel, прикрепленные с x-csrf-headers? Я хочу сделать это без необходимости изменять настройки Laravel, чтобы не прикреплять эти заголовки, поскольку они являются функцией безопасности, реализованной Laravel для смягчения атак CSRF.
django.middleware.csrf.CsrfViewMiddleware
в промежуточное ПО? - person bak2trak   schedule 18.06.2019Cors, Common, Csrf
- person Tribunal   schedule 18.06.2019test.net
внутриCSRF_TRUSTED_ORIGIN
в качестве указанного комментария, но ничего не изменилось. - person Tribunal   schedule 18.06.2019