Опубликовать запрос в 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 голосов
/ 09 ноября 2018

У меня также была такая проблема, и я обнаружил, что файлы сеанса были заблокированы для записи.Итак, я не знаю, запускаете ли вы Laravel через такие вещи, как vagrant или Docker, но я советую вам попытаться изменить права на каталог сеанса (и файлы, разумеется) (при запуске Laravel на виртуальной машине вы должныизменить права локально и в виртуальной машине (например, когда вы делитесь файлами через NFS)

Примерно так:

chmod -R 777 storage/framework/sessions
chmod -R 777 storage/logs

Я знаю, разрешение 777 - это худшее бедствие, которое вы можетекогда-нибудь представляю. Но они удобны для устранения неполадок.

Чтобы быть уверенным, что я никогда этого не забуду, я создал скрипт bash (назвал его lalog, просто потому, что хотел очистить файлы журнала и установить разрешения)

Примечание: Убедитесь, что вы используете это в каталоге сеанса. В config / session.php есть ключ files, объявленный с местоположением. В моем случае:

<?php
//...........
'files' => storage_path('framework/sessions'),
//...........

Расположение: / usr / bin / lalog (Это файл, а не каталог)
Выполнить в оболочке как lalog

#!/bin/bash
rm -rf /home/username/Projects/x/storage/logs/laravel.log
echo "Laravel log removed"
touch /home/username/Projects/x/storage/logs/laravel.log
echo "Laravel log created"
chmod -R 777 /home/username/Projects/x/storage/
echo "CHMOD 777 on Storage dir"

Предупреждение! Это позволит всем пользователям записывать доступтак что будьте осторожны с этим!некоторая полезная информация в файле журнала Laravel.(не забудьте заглянуть в этот файл журнала перед запуском моего bash-скрипта)

Кроме того, я знаю, что он уже упоминался.Но, будьте полностью уверены, что вы всегда

  1. разрешаете куки в браузере, чтобы токен можно было установить в куки
  2. Проверьте, используете ли вы @csrf в своем блейдеfile

Форма должна выглядеть примерно так

<form method="POST" action="{{ route('login') }}">
@csrf
.......
</form>
0 голосов
/ 07 ноября 2018
<form method="POST" action="{{ url('foo') }}" >

or 
composer update or composer install

or 
in your Http/Kernel.php comment this line (not recommended)
// \App\Http\Middleware\VerifyCsrfToken::class,
0 голосов
/ 06 ноября 2018

В вашем Http/Kernel.php

попробуйте прокомментировать эту строку:

\Illuminate\Session\Middleware\AuthenticateSession::class,

в вашем сетевом промежуточном массиве

это может бытькорень вашей проблемы

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

Как насчет использования

{{ csrf_field() }} вместо @csrf

419 Ошибка в основном из-за проблем с токеном csrf.

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

Просто, чтобы поставить это там, у меня были те же проблемы.В моей местной усадьбе он работал бы как положено, но после отправки его на сервер разработки я также получил сообщение об истечении времени сеанса.Понимая, что это проблема среды, я изменил с apache на nginx, и это чудесным образом заставило проблему исчезнуть.

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

В коде нет проблем.Я проверил тот же код, который вы написали при новой установке.

Код формы:

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

web.php Код файла:

Route::get('/', function () {
    return view('welcome');
});

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

Результатпосле отправки формы: Output after submitting the form

Если вы очистите кеш браузера или попробуйте использовать другой браузер, думаю, он будет исправлен.

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

Я использую Laravel 5.7 У меня была та же проблема, и это было потому, что токен csrf не был в форме, поэтому добавление

@csrf

устранило проблему

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

Быстрый плохой подход состоит в том, что перейдите в app \ http \ middleware \ verifycsrftoken.php и добавьте маршрут в $ кроме списка.Почтовый запрос будет игнорироваться для проверки токена CSRF.

protected $except = [
    //
    'doLogin.aspx',
    'create_coupon',
];
0 голосов
/ 16 февраля 2019

измените @csrf в welcome.blade.php на <input type="hidden" name="_token" value="{{ csrf_token() }}">

, поэтому ваш код будет таким:

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

   <button type="submit">Submit</button>
</form>
0 голосов
/ 11 ноября 2018

На самом деле SCRF - это токен на основе сеанса.Добавьте ваш маршрут в группу маршрутов и добавьте промежуточное ПО, управляющее сеансами.

web - это промежуточное ПО по умолчанию в laravel, которое может управлять запросами сеансов.

Route::group(array('middleware' => ['web']), function () {
  Route::post('/foo', function () {
     echo 1;
     return;
  });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...