У меня есть несколько сайтов Laravel, размещенных на одном сервере.С последним сайтом, который я создал, контактная форма отказывается отправить, не выдавая ошибку 419.Я настроил маршрутизацию в своем файле web.php, как и на других веб-сайтах, на которых есть действующие рабочие контактные формы, и я генерирую и отправляю токен точно таким же образом - с помощью {{ csrf_field() }}
.
* 1003.* Я нашел ответ на аналогичный вопрос о том, что вы можете отключить проверку Csrf, добавив записи в массив
$except
в
app/Http/Middleware/VerifyCsrfToken.php
.Я подтвердил, что это действительно разрешает ошибку 419:
protected $except = [
'contact',
'contact*',
];
Но, конечно, я хочу сохранить функциональность Csrf, и я только обновил массив $except
для значения устранения неполадок.
Кто-нибудь знает, что может отличаться в новой среде Laravel, которая будет иметь такое поведение 419, несмотря на передачу сгенерированного токена?Я пытался обновить ряд настроек ENV и переключать различные функции, но ничто иное, как изменение массива $except
, никак не повлияло на проблему.
Обновление
Поскольку произошлаПока я немного обсудил, я решил предоставить дополнительную информацию и код.
Во-первых, это форма ajax, но пока не выпрыгивайте из своего места.Я тестировал форму как с, так и без ajax.Если я хочу протестировать с ajax, я просто нажимаю кнопку, подключенную к слушателю jQuery.Если нет, я изменяю или удаляю идентификатор кнопки или запускаю $("#formName").submit();
в окне консоли.
Все вышеперечисленное (ajax, старомодная отправка и селектор jquery с .submit();
) приводят кточно такой же ответ - ошибка 419.
И ради полноты, вот мой код ajax, который работает на всех других веб-сайтах, которые я размещаю.Я определил массив postData, чтобы сохранить все в порядке, и я добавил оператор console.log()
сразу после него, чтобы (снова) подтвердить, что токен сгенерирован очень хорошо и правильно передается с запросом.
var postData = {
name: $("#name").val(),
email: $("#email").val(),
message: $("#message").val(),
_token: $("input[name=_token]").val()
};
console.log(postData);
$.post("/contact", postData, function (data) {
...
Есть идеи?Может ли быть проблема конфигурации с моим ENV или другим файлом?
Обновление прогресса!
Поскольку другие сайты работают очень хорошо, я клонировал старый сайт и просто переписал файлы, которые я изменилдля нового сайта, и БАМ!Теперь это работает.Сделав немного больше копания, я запустил php artisan --version
на клонированной версии сайта по сравнению с нерабочей версией, и вот результаты:
Рабочая версия: Laravel Framework 5.7.3
Не работающая версия: Laravel Framework 5.7.9
Возможно, это ошибка в Laravel?Или, возможно, некоторые пакеты на моем сервере устарели и требуют обновления для работы с новой версией Laravel?