Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Всем привет.
Проблема такая
У меня при отправке формы ошибка 419 page expired.
Перелопатив всё, что нашел в гугле, я пробовал делать следующее:
Проставлять права на запись в папке storage (файлы создаются при каждом обновлении страницы новые)
Переключился на хранение в БД (новые строки создаются)
Прописывал в форме так: @csrf
Прописывал в форме так: <input type="hidden" name="_token" value="{{ csrf_token() }}">
чистил кэши, пересобирал проект после удаления папки "vendor"
Ничего из этого не помогло. Единственным выходом было отрубить эту проверку csrf токена.
Сайт вертится на open server. Laravel 5.8 самая свежая.
Повторюсь, что всё работает, если вырубить проверку токена. МОжет надо что-то с сервером делать?
Код роута:
Route::resource('/admin/regions', 'Admin\RegionsController');
В форме:
<form action="{{route('regions.store')}}" method="post">
@csrf
<div class="form-group">
<label for="title">Название</label>
<input type="text" class="form-control" id="title" name="title" placeholder="">
</div>
.
.
.
</form>
Не в сети
Напиши так
@csrf
@method('post')
Не в сети
Не помогло, всё так же 419
Не в сети
Эту проблему смог решить переносом в файле app/Http/Kernel.php вызова класса \Illuminate\Session\Middleware\StartSession::class из группы $middlewareGroups в глобальную группу $middleware :
protected $middleware = [
...
\Illuminate\Session\Middleware\StartSession::class,
];
Это, также, решает проблему с выводом ошибок в формах.
Изменено Evgenium127 (11.07.2019 14:46:00)
Не в сети
Если все делать правильно, никаких ошибок отправки форм не будет, даже без переноса указанного файла. Где-то есть косяк, ищи.
Не в сети
Посмотри, какие у тебя прописаны допустимые методы для которых не проверятся наличие csrf в Illuminate\Foundation\Http\Middleware. Должно быть так:
protected function isReading($request)
{
return in_array($request->method(), ['HEAD', 'GET', 'OPTIONS']);
}
Не в сети
Не в сети
в файле VerifyCsrfToken.php добавь свое исключение в массив $except = [ 'api/*'];
Не в сети
просто напиши вместо @csrf {{csrf_field()}}
Не в сети
Попробуйте в web.php вставить вот такой роутинг
Route::get('/token', function (Request $request) {
$token = $request->session()->token();
$token = csrf_token();
});
документация по csrf lara 8.x
Изменено RussianGrizzly (27.01.2021 11:22:18)
Не в сети
Страницы 1