Опубликовать запрос в Laravel 5.7, laravel 5.8 --- Ошибка - 419 Извините, срок вашей сессии истек - PullRequest
0 голосов
/ 01 октября 2018

Я установил Laravel 5.7

Добавил форму в файл \resources\views\welcome.blade.php

<form method="POST" action="/foo" >
    @csrf
    <input type="text" name="name"/><br/>
    <input type="submit" value="Add"/>
</form>

Добавил в файл \routes\web.php

Route::post('/foo', function () {
    echo 1;
    return;
});

После отправки POSTзапрос:

419 К сожалению, ваш сеанс истек.Пожалуйста, обновите и попробуйте снова.

В версии 5.6 такой проблемы не было.

Ответы [ 26 ]

0 голосов
/ 03 декабря 2018

Попробуйте закомментировать \App\Http\Middleware\EncryptCookies::class в \app\Http\Kernel.php У меня похожая проблема, и я решил ее.Вероятно, не лучшее решение, потому что безопасность, но по крайней мере это сработало.

Ранее я пытался:

  • Очистить кеш
  • Создать новый ключ приложения
  • Запустите мое приложение в различных браузерах (Chrome 70, Mozilla Firefox 57 и IE 11)
  • Запустите мое приложение на другом компьютере
  • Прокомментируйте \App\Http\Middleware\VerifyCsrfToken::class в \app\Http\Kernel.php
  • Комментарий из \Illuminate\Session\Middleware\AuthenticateSession::class в \app\Http\Kernel.php
  • Обновление и понижение Laravel (между 5,6 и 5,7)

Но ни одно из вышеперечисленного не помогло мне.

РЕДАКТИРОВАТЬ

Мой случай здесь каждый раз, когда я вхожу в систему, создается новый файл сеанса (старый все еще сохраняется, но внезапно забыт. Проверьте storage/framework/sessions) и новый CSRFтокен сгенерирован.Так что проблема не в VerifyCsrfToken.

Как упомянуто @Vladd в разделе комментариев, вы должны никогда комментировать \App\Http\Middleware\VerifyCsrfToken::class.Вы должны убедиться, что вы отправили правильный CSRF TOKEN на сервер.

0 голосов
/ 14 октября 2018

У меня была точно такая же проблема, и я был совершенно глуп.Я отключил все поля формы (а не только кнопку отправки) через javascript перед отправкой указанной формы!Это, конечно, привело к тому, что все элементы формы не были отправлены (включая скрытое поле _token), что, в свою очередь, привело к ошибке 419!

Надеюсь, это поможет кому-то из нескольких часов головыЦарапин!

Отключенные формы ввода не отображаются в запросе

0 голосов
/ 29 ноября 2018

У меня была похожая проблема, и я нашел решение этой проблемы

, если вы выводите эхо или печатаете что-то с контроллера, когда всплывает окно возврата, чтобы просмотреть эту проблему.

, поэтому убедитесь, чтовы не используете echo или print, когда ваш контроллер возвращает

0 голосов
/ 20 мая 2019

Через столько времени я решил проблему таким образом

Мой путь установки laravel был не таким, как указано в файле конфигурации session.php

'domain' => env('SESSION_DOMAIN', 'example.com'),
0 голосов
/ 06 августа 2019

использование

{{@csrf_field()}}

insted из

@csrf

0 голосов
/ 06 февраля 2019

вариант 1: если вы запускаете проект в своей локальной системе, например 127.0.01: 8000,

, то

добавьте SESSION_DOMAIN= в ваш файл .env

или в вашем config / session.php 'domain' => env('SESSION_DOMAIN', ''),

, а затем выполните php artisan cache:clear

case 2: если проект запущен на сервере, и у вас естьдомен типа "mydomain.com"

добавьте SESSION_DOMAIN=mydomain.com в ваш файл .env

или в свой config / session.php 'domain' => env('SESSION_DOMAIN', 'mydomain.com'),

, а затемпробег php artisan cache:clear

0 голосов
/ 28 марта 2019

Я получил эту проблему давным-давно.Я вспомнил, что это вызывает разрешение storage/framework/sessions.Вы можете изменить его командой chmod -R 0777 storage/framework/sessions.У меня это сработало.

0 голосов
/ 09 ноября 2018

Вы не можете сделать пустой возврат на Laravel 5.6 или выше.Laravel всегда ожидает, что значение будет возвращено.(Знаю из прошлого опыта).Это главным образом связано с тем, как PHP 7 обрабатывает пустые возвраты.

0 голосов
/ 10 ноября 2018

Вы неправильно добавили поле CSRF.Вместо @csrf вы должны использовать csrf_field() следующим образом:

<form method="POST" action="/foo" >
    {{ csrf_field() }}
    <input type="text" name="name"/><br/>
    <input type="submit" value="Add"/>
</form>
0 голосов
/ 09 ноября 2018

Это может быть излишним, но вы можете попробовать это:

// Форма вызова с именем маршрут с добавленным скрытым полем токена.

<form method="POST" action="{{ route('foo') }}" >
    @csrf
    <input type="hidden" name="_token" value="{!! csrf_token() !!}">
    <input type="text" name="name"/><br/>
    <input type="submit" value="Add"/>
</form>

// Named Route

Route::post('/foo', function () {
    return 'bar';
})->name('foo');

// Добавьте это в блок <head></head>:

<meta name="_token" content="{!! csrf_token() !!}" />

Я протестировал его на своем локальном компьютере, используя Homestead на Laravel 5.7, который былустановил заново используя Laravel Installer 2.0.1 и все заработало.Какова ваша среда?

Теория: Интересно, это как-то связано с рендерингом html-меток с блейдом с {{ }} против {!! !!} в вашей среде или с тем, как вы его обслуживаете (например, php artisan serve).Что заставляет меня думать, что line 335 из /vendor/laravel/framework/src/illuminate/Foundation/helpers.php должно отображать ту же строку, напечатанную вручную выше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...