Меню

419 ошибка на сайте

400 — Bad Request (Некорректный запрос)

«Плохой запрос». Этот ответ означает, что сервер не понимает… Читать далее

Подробнее

401 — Unauthorized (Не авторизован)

«Неавторизовано». Для получения запрашиваемого ответа нужна … Читать далее

Подробнее

402 — Payment Required (Необходима оплата)

«Необходима оплата». Этот код ответа зарезервирован для буду… Читать далее

Подробнее

403 — Forbidden (Запрещено)

«Запрещено». У клиента нет прав доступа к содержимому, поэто… Читать далее

Подробнее

404 — Not Found (Не найдено)

«Не найден». Сервер не может найти запрашиваемый ресурс. Код… Читать далее

Подробнее

405 — Method Not Allowed (Метод не поддерживается)

«Метод не разрешен». Сервер знает о запрашиваемом методе, но… Читать далее

Подробнее

406 — Not Acceptable (Неприемлемо)

Этот ответ отсылается, когда веб сервер после выполнения ser… Читать далее

Подробнее

407 — Proxy Authentication Required (Необходима аутентификация прокси)

Этот код ответа аналогичен коду 401, только аутентификация т… Читать далее

Подробнее

408 — Request Timeout (Истекло время ожидания)

Ответ с таким кодом может прийти, даже без предшествующего з… Читать далее

Подробнее

409 — Conflict (Конфликт)

Этот ответ отсылается, когда запрос конфликтует с текущим со… Читать далее

Подробнее

410 — Gone (Удалён)

Этот ответ отсылается, когда запрашиваемый контент удален с … Читать далее

Подробнее

411 — Length Required (Необходима длина)

Запрос отклонен, потому что сервер требует указание заголовк… Читать далее

Подробнее

412 — Precondition Failed (Условие ложно)

Клиент указал в своих заголовках условия, которые сервер не … Читать далее

Подробнее

413 — Request Entity Too Large (Полезная нагрузка слишком велика)

Размер запроса превышает лимит, объявленный сервером. Сервер… Читать далее

Подробнее

414 — Request-URI Too Long (URI слишком длинный)

URI запрашиваемый клиентом слишком длинный для того, чтобы с… Читать далее

Подробнее

415 — Unsupported Media Type (Неподдерживаемый тип данных)

Медиа формат запрашиваемых данных не поддерживается сервером… Читать далее

Подробнее

416 — Requested Range Not Satisfiable (Диапазон не достижим)

Диапозон указанный заголовком запроса Range не может бы… Читать далее

Подробнее

417 — Expectation Failed (Ожидание не удалось)

Этот код ответа означает, что ожидание, полученное из заголо… Читать далее

Подробнее

418 — I’m a teapot (Я — чайник)

I’m a teapot — Этот код был введен в 1998 году как одна из т… Читать далее

Подробнее

419 — Authentication Timeout (not in RFC 2616) (Обычно ошибка проверки CSRF)

Authentication Timeout (not in RFC 2616) — Этого кода нет в … Читать далее

Подробнее

420 — Enhance Your Calm (Twitter) (Подождите немного (Твиттер))

Возвращается Twitter Search и Trends API, когда клиент отпра… Читать далее

Подробнее

421 — Misdirected Request (Неверный запрос)

Misdirected Request — запрос был перенаправлен на сервер, не… Читать далее

Подробнее

422 — Unprocessable Entity (Необрабатываемый экземпляр)

Запрос имел правильный формат, но его нельзя обработать из-з… Читать далее

Подробнее

423 — Locked (Заблокировано)

Целевой ресурс из запроса заблокирован от применения к нему … Читать далее

Подробнее

424 — Failed Dependency (Невыполненная зависимость)

Не удалось завершить запрос из-за ошибок к предыдущем запрос… Читать далее

Подробнее

425 — Too Early (Слишком рано)

Too Early — сервер не готов принять риски обработки «ранней … Читать далее

Подробнее

426 — Upgrade Required (Необходимо обновление)

Указание сервера, клиенту, обновить протокол. Заголовок отве… Читать далее

Подробнее

428 — Precondition Required (Необходимо предусловие)

Precondition Required — сервер указывает клиенту на необходи… Читать далее

Подробнее

429 — Too Many Requests (Слишком много запросов)

Too Many Requests — клиент попытался отправить слишком много… Читать далее

Подробнее

430 — Would Block (Будет заблокировано)

Код состояния 430 would Block — это код, который сервер мог … Читать далее

Подробнее

431 — Request Header Fields Too Large (Поля заголовка запроса слишком большие)

Request Header Fields Too Large — Превышена допустимая длина… Читать далее

Подробнее

434 — Requested host unavailable (Запрашиваемый адрес недоступен)

Сервер к которому вы обратились недоступен… Читать далее

Подробнее

444 — No Response (Nginx) (Нет ответа (Nginx))

Код ответа Nginx. Сервер не вернул информацию и закрыл соеди… Читать далее

Подробнее

449 — Retry With (Повторить с…)

Retry With — возвращается сервером, если для обработки запро… Читать далее

Подробнее

450 — Blocked by Windows Parental Controls (Microsoft) (Заблокировано родительским контролем Windows (Microsoft))

Расширение Microsoft. Эта ошибка возникает, когда родительск… Читать далее

Подробнее

451 — Unavailable For Legal Reasons (Недоступно по юридическим причинам)

Unavailable For Legal Reasons — доступ к ресурсу закрыт по ю… Читать далее

Подробнее

499 — Client Closed Request (Клиент закрыл соединение)

Нестандартный код состояния, представленный nginx для случая… Читать далее

Подробнее

#1 09.07.2019 16:07:58

Ошибка 419 при любых настройках сессии и формы

Всем привет.
Проблема такая
У меня при отправке формы ошибка 419 page expired.
Перелопатив всё, что нашел в гугле, я пробовал делать следующее:

  • Проставлять права на запись в папке storage (файлы создаются при каждом обновлении страницы новые)

  • Переключился на хранение в БД (новые строки создаются)

  • Прописывал в форме так: @csrf

  • Прописывал в форме так:  <input type=»hidden» name=»_token» value=»{{ csrf_token() }}»>

  • чистил кэши, пересобирал проект после удаления папки «vendor»

Ничего из этого не помогло. Единственным выходом было отрубить эту проверку csrf токена.
Сайт вертится на open server. Laravel 5.8 самая свежая.
Повторюсь, что всё работает, если вырубить проверку токена. МОжет надо что-то с сервером делать?
Код роута:

Route::resource('/admin/regions', 'AdminRegionsController');

В форме:

<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>

#2 09.07.2019 16:50:23

Re: Ошибка 419 при любых настройках сессии и формы

Напиши так
@csrf
@method(‘post’)

#3 09.07.2019 17:59:28

Re: Ошибка 419 при любых настройках сессии и формы

Не помогло, всё так же 419

#4 11.07.2019 13:55:31

Re: Ошибка 419 при любых настройках сессии и формы

Эту проблему смог решить переносом в файле app/Http/Kernel.php вызова класса IlluminateSessionMiddlewareStartSession::class из группы $middlewareGroups в глобальную группу $middleware :

protected $middleware = [
        ...
        IlluminateSessionMiddlewareStartSession::class,
    ];

Это, также, решает проблему с выводом ошибок в формах.

Изменено Evgenium127 (11.07.2019 14:46:00)

#5 11.07.2019 15:19:00

Re: Ошибка 419 при любых настройках сессии и формы

Если все делать правильно, никаких ошибок отправки форм не будет, даже без переноса указанного файла. Где-то есть косяк, ищи.

#6 28.02.2020 14:56:26

Re: Ошибка 419 при любых настройках сессии и формы

Посмотри, какие у тебя прописаны допустимые методы для которых не проверятся наличие csrf в IlluminateFoundationHttpMiddleware. Должно быть так:

  protected function isReading($request)
    {
        return in_array($request->method(), [‘HEAD’, ‘GET’, ‘OPTIONS’]);
    }

#7 01.03.2020 09:58:17

TrueKanonir

Откуда: Ташкент
Сообщений: 221

Re: Ошибка 419 при любых настройках сессии и формы

Было такое один раз. В моем случае это решилось очисткой кук.

#8 14.05.2020 22:25:36

Re: Ошибка 419 при любых настройках сессии и формы

в файле VerifyCsrfToken.php добавь свое исключение в массив $except = [ ‘api/*’];

#9 20.05.2020 13:27:07

Re: Ошибка 419 при любых настройках сессии и формы

просто напиши вместо @csrf {{csrf_field()}}

#10 27.01.2021 11:17:32

Re: Ошибка 419 при любых настройках сессии и формы

Попробуйте в 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)

Отправить запрос в Laravel — Ошибка — 419 Извините, ваша сессия / 419 ваша страница истекла

419 К сожалению, срок вашего сеанса истек. Обновите страницу и попробуйте еще раз.

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

Перед чтением ниже убедитесь, что у вас есть @csrf или > в вашей форме нравится

Сообщение об ошибке Session Expired или 419 Page Expired в larvel появляется из-за того, что где-то не удается проверить ваш токен csrf, что означает, что AppHttpMiddlewareVerifyCsrfToken::class промежуточное ПО уже включено. В форме @csrf уже добавлена ​​директива blade, что тоже должно быть хорошо.

Затем другая область для проверки — это сеанс. csrf Маркер проверка непосредственно связана с вашей сессией, поэтому вы можете проверить , является ли драйвер сеанса работой или нет, например, неправильно настроенного Redis может вызвать проблемы.

Возможно, вы можете попробовать переключить драйвер / программное обеспечение сеанса из .env файла, поддерживаемые драйверы приведены ниже.

Поддерживаемые драйверы сеансов в Laravel 5, Laravel 6 и Laravel 7 (Doc Link)

  • file — сеансы хранятся в хранилище / framework / sessions.
  • cookie — сеансы хранятся в безопасных зашифрованных файлах cookie.
  • database — сеансы хранятся в реляционной базе данных.
  • memcached / redis — сеансы хранятся в одном из этих быстрых хранилищ на основе кеша.
  • array — сеансы хранятся в массиве PHP и не сохраняются.

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

Возможные сценарии, подверженные ошибкам

Вероятно, сеансы на основе файлов могут не работать из-за проблем с правами доступа к /storage каталогу (быстрый поиск в Google даст вам решение), также помните, что установка 777 для каталога никогда не является решением.

В случае с драйвером базы данных ваше соединение с БД может быть неправильным, или sessions таблица может не существовать или неправильно настроена (неправильная часть конфигурации была подтверждена как проблема в соответствии с комментарием @Junaid Qadir).

redis/memcached конфигурация неверна или одновременно обрабатывается другим фрагментом кода в системе.

Было бы неплохо выполнить php artisan key:generate и сгенерировать новый ключ приложения, который, в свою очередь, сбрасывает данные сеанса.

Очистить кеш браузера СЛОЖНО , я обнаружил, что хром и firefox виноваты больше, чем я могу вспомнить.

Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

  • Темы: Активные | Без ответов

Страницы 1

#1 09.07.2019 16:07:58

Ошибка 419 при любых настройках сессии и формы

Всем привет.
Проблема такая
У меня при отправке формы ошибка 419 page expired.
Перелопатив всё, что нашел в гугле, я пробовал делать следующее:

Проставлять права на запись в папке storage (файлы создаются при каждом обновлении страницы новые)

Переключился на хранение в БД (новые строки создаются)

Прописывал в форме так: @csrf

чистил кэши, пересобирал проект после удаления папки «vendor»

Ничего из этого не помогло. Единственным выходом было отрубить эту проверку csrf токена.
Сайт вертится на open server. Laravel 5.8 самая свежая.
Повторюсь, что всё работает, если вырубить проверку токена. МОжет надо что-то с сервером делать?
Код роута:

Что ЭТОГО 419 страница истекла laravel ОШИБКА

Если вы используете приложение, разработанное в laravel, вы можете получить сообщение об ошибке «Срок действия страницы 419 истек».

Что такое 419 Страница просрочена

Давайте сначала обсудим 419 код состояния HTTP, Код состояния 419 Указывает, что аутентификация не удалась для ранее аутентифицированного запроса или истек срок действия ключа / токена аутентификации. Если вы посмотрите на стандартные коды состояния HTTP, вы не найдете его там, вы можете каким-то образом рассматривать его как альтернативу 401, что если код статуса для неавторизованных. Таким образом, это означает, что когда вы получаете ошибку с истекшим сроком действия 419 страниц, это означает, что сервер пытается сообщить вам, что ваша аутентификация для определенного запроса истекла.

Почему вы получаете 419 Page истек в Laravel?

Laravel Framework имеет функцию безопасности, которая помогает вам в защита вашего сайта от CSRF, Если вам интересно, почему вы получаете эту ошибку, прочитайте этот пример, и вы узнаете о базовом механизме защиты от CSRF в Laravel и о причине ошибки.

Допустим, вы зашли на страницу входа в приложение laravel в своем браузере, и вам позвонил друг. Вы были заняты разговором с другом и забыли о входе в приложение, и страница оставалась там довольно долго. Вы вернулись туда, где ушли, вы заполнили форму и Voilá, ошибка 419 страницы истекла, Если вы просматриваете страницу или просматриваете исходный код в браузере и просматриваете форму входа, это скрытое поле ввода с длинной строкой, например, токен CSRF, этот токен отвечает за защиту от CSRF [подробнее о csrf]. Когда вы покинули экран своего компьютера и были заняты разговором с другом, срок действия этого токена истек, и ваш запрос был отклонен с кодом состояния 419 HTTP.

Что может вызвать проблему истечения срока действия страницы 419

  • Вы не отправляете токен CSRF с формой и не используете промежуточное ПО verifyCSRF
  • Вы тратите слишком много времени на отправку запроса
  • вы взломали скрытое поле токена
  • Вы правильно настроили параметры сеанса в файле конфигурации сеанса

Как это исправить?

Самый простой способ исправить проблему — перезагрузить страницу. После перезагрузки вы получите новый токен, который означает, что вы готовы к работе.

Проверьте токен csrf в форме, которую вы отправляете. Наконец, убедитесь, что конфигурация для домена и файлов cookie выполнена правильно в файле конфигурации сеанса.

Если вы разрабатываете приложение, вы можете время от времени использовать некоторый Javascript для обновления токена. Вот ссылке как стартер для решения вашей проблемы.

You need to setup CSRF https://laravel.com/docs/8.x/csrf

Introduction

Cross-site request forgeries are a type of malicious exploit whereby unauthorized commands are performed on behalf of an authenticated user. Thankfully, Laravel makes it easy to protect your application from cross-site request forgery (CSRF) attacks.

An Explanation Of The Vulnerability

In case you’re not familiar with cross-site request forgeries, let’s discuss an example of how this vulnerability can be exploited. Imagine your application has a /user/email route that accepts a POST request to change the authenticated user’s email address. Most likely, this route expects an email input field to contain the email address the user would like to begin using.

Without CSRF protection, a malicious website could create an HTML form that points to your application’s /user/email route and submits the malicious user’s own email address:

<form action="https://your-application.com/user/email" method="POST">
    <input type="email" value="malicious-email@example.com">
</form>

<script>
    document.forms[0].submit();
</script>

If the malicious website automatically submits the form when the page is loaded, the malicious user only needs to lure an unsuspecting user of your application to visit their website and their email address will be changed in your application.

To prevent this vulnerability, we need to inspect every incoming POST, PUT, PATCH, or DELETE request for a secret session value that the malicious application is unable to access.

Preventing CSRF Requests
Laravel automatically generates a CSRF «token» for each active user session managed by the application. This token is used to verify that the authenticated user is the person actually making the requests to the application. Since this token is stored in the user’s session and changes each time the session is regenerated, a malicious application is unable to access it.

The current session’s CSRF token can be accessed via the request’s session or via the csrf_token helper function:

use IlluminateHttpRequest;

Route::get('/token', function (Request $request) {
    $token = $request->session()->token();

    $token = csrf_token();

    // ...
});

Anytime you define a «POST», «PUT», «PATCH», or «DELETE» HTML form in your application, you should include a hidden CSRF _token field in the form so that the CSRF protection middleware can validate the request. For convenience, you may use the @csrf Blade directive to generate the hidden token input field:

<form method="POST" action="/profile">
    @csrf

    <!-- Equivalent to... -->
    <input type="hidden" name="_token" value="{{ csrf_token() }}" />
</form>

The AppHttpMiddlewareVerifyCsrfToken middleware, which is included in the web middleware group by default, will automatically verify that the token in the request input matches the token stored in the session. When these two tokens match, we know that the authenticated user is the one initiating the request.

CSRF Tokens & SPAs
If you are building an SPA that is utilizing Laravel as an API backend, you should consult the Laravel Sanctum documentation for information on authenticating with your API and protecting against CSRF vulnerabilities.

Excluding URIs From CSRF Protection
Sometimes you may wish to exclude a set of URIs from CSRF protection. For example, if you are using Stripe to process payments and are utilizing their webhook system, you will need to exclude your Stripe webhook handler route from CSRF protection since Stripe will not know what CSRF token to send to your routes.

Typically, you should place these kinds of routes outside of the web middleware group that the AppProvidersRouteServiceProvider applies to all routes in the routes/web.php file. However, you may also exclude the routes by adding their URIs to the $except property of the VerifyCsrfToken middleware:

<?php

namespace AppHttpMiddleware;

use IlluminateFoundationHttpMiddlewareVerifyCsrfToken as Middleware;

class VerifyCsrfToken extends Middleware
{
    /**
     * The URIs that should be excluded from CSRF verification.
     *
     * @var array
     */
    protected $except = [
        'stripe/*',
        'http://example.com/foo/bar',
        'http://example.com/foo/*',
    ];
}

You need to setup CSRF https://laravel.com/docs/8.x/csrf

Introduction

Cross-site request forgeries are a type of malicious exploit whereby unauthorized commands are performed on behalf of an authenticated user. Thankfully, Laravel makes it easy to protect your application from cross-site request forgery (CSRF) attacks.

An Explanation Of The Vulnerability

In case you’re not familiar with cross-site request forgeries, let’s discuss an example of how this vulnerability can be exploited. Imagine your application has a /user/email route that accepts a POST request to change the authenticated user’s email address. Most likely, this route expects an email input field to contain the email address the user would like to begin using.

Without CSRF protection, a malicious website could create an HTML form that points to your application’s /user/email route and submits the malicious user’s own email address:

<form action="https://your-application.com/user/email" method="POST">
    <input type="email" value="malicious-email@example.com">
</form>

<script>
    document.forms[0].submit();
</script>

If the malicious website automatically submits the form when the page is loaded, the malicious user only needs to lure an unsuspecting user of your application to visit their website and their email address will be changed in your application.

To prevent this vulnerability, we need to inspect every incoming POST, PUT, PATCH, or DELETE request for a secret session value that the malicious application is unable to access.

Preventing CSRF Requests
Laravel automatically generates a CSRF «token» for each active user session managed by the application. This token is used to verify that the authenticated user is the person actually making the requests to the application. Since this token is stored in the user’s session and changes each time the session is regenerated, a malicious application is unable to access it.

The current session’s CSRF token can be accessed via the request’s session or via the csrf_token helper function:

use IlluminateHttpRequest;

Route::get('/token', function (Request $request) {
    $token = $request->session()->token();

    $token = csrf_token();

    // ...
});

Anytime you define a «POST», «PUT», «PATCH», or «DELETE» HTML form in your application, you should include a hidden CSRF _token field in the form so that the CSRF protection middleware can validate the request. For convenience, you may use the @csrf Blade directive to generate the hidden token input field:

<form method="POST" action="/profile">
    @csrf

    <!-- Equivalent to... -->
    <input type="hidden" name="_token" value="{{ csrf_token() }}" />
</form>

The AppHttpMiddlewareVerifyCsrfToken middleware, which is included in the web middleware group by default, will automatically verify that the token in the request input matches the token stored in the session. When these two tokens match, we know that the authenticated user is the one initiating the request.

CSRF Tokens & SPAs
If you are building an SPA that is utilizing Laravel as an API backend, you should consult the Laravel Sanctum documentation for information on authenticating with your API and protecting against CSRF vulnerabilities.

Excluding URIs From CSRF Protection
Sometimes you may wish to exclude a set of URIs from CSRF protection. For example, if you are using Stripe to process payments and are utilizing their webhook system, you will need to exclude your Stripe webhook handler route from CSRF protection since Stripe will not know what CSRF token to send to your routes.

Typically, you should place these kinds of routes outside of the web middleware group that the AppProvidersRouteServiceProvider applies to all routes in the routes/web.php file. However, you may also exclude the routes by adding their URIs to the $except property of the VerifyCsrfToken middleware:

<?php

namespace AppHttpMiddleware;

use IlluminateFoundationHttpMiddlewareVerifyCsrfToken as Middleware;

class VerifyCsrfToken extends Middleware
{
    /**
     * The URIs that should be excluded from CSRF verification.
     *
     * @var array
     */
    protected $except = [
        'stripe/*',
        'http://example.com/foo/bar',
        'http://example.com/foo/*',
    ];
}

У меня есть несколько сайтов Laravel, размещенных на одном сервере. С последним созданным мной сайтом контактная форма отказывается отправлять сообщения без ошибки 419. Я настроил маршрутизацию в своем файле web.php, как и на других веб-сайтах, на которых есть действующие рабочие контактные формы, и я генерирую и отправляю токен точно так же, {{ csrf_field() }},

Я нашел ответ на аналогичный вопрос о том, что вы можете отключить проверку 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?

1

Решение

только что нашел вашу проблему в рамках репо.
Это не проблема laravel, в вашей установке отсутствуют разрешения на запись в папку хранилища, поэтому laravel не может записывать сеанс, журналы и т. Д.

Вы получаете ошибку 419, потому что вы не можете записать в файлы, и, следовательно, вы не можете создать сессию, то есть вы не можете проверить токен csrf.

Быстрая починка: chmod -R 777 storage

Правильное исправление: переместите вашу установку в папку, в которую nginx / apache / ваш пользователь может написать.
Если вы используете nginx / apache, перенесите туда свое приложение и предоставьте необходимые права на проект (chown -R www-data: /path-to-project)
Если вы используете php artisan serve, измените его разрешения для вашего пользователя: chown -R $(whoami) /path-to-project

Вы понимаете, пусть писатели пишут, и у вас все хорошо.

0

Другие решения

проверить этот код

Route::get('/contact', [
'uses' => 'ContactController@index',
'nocsrf' => true,
]);
Route::post('/contact', [
'uses' => 'ContactController@contactSubmit',
'nocsrf' => true,
]);

или вы можете удалить отверстие CSRF

protected $except = [
'*'
];

-2

The 419 Page Expired error is very common and easy to fix in Laravel applications. It’s caused by the internal framework mechanism called CSRF protection. CSRF stands for Cross-Site Request Forgery and is one of the most popular attacks.

An error page layout may differ between the framework versions, but the error code (419) and the error message (Page Expired) are the same. The following screenshot comes from Laravel 8.

To avoid this issue, every POST, PUT, PATCH, and DELETE request have to have a csrf token as a parameter. Depending on the way you send your request, you have several options to append this parameter.

Solution #1 – Blade directive

When you create a form in a Blade template, the solution is extremely simple. Blade template engine has a built-in directive @csrf that generates a hidden HTML input containing the token. The directive should be added just after opening <form> tag.

<form method="POST" action="/register">
    @csrf
        
    <label for="email">Email</label>
    <input type="email" name="email">

    <label for="email">Password</label>
    <input type="password" name="password">

    <button type="submit">Save</button>
</form>

Alternatively, you can create a token input manually, using csrf_token() method. Outcome will be identical.

<!-- Equivalent for @csrf directive -->
<input type="hidden" name="_token" value="{{ csrf_token() }}">

Solution #2 – Header of the Ajax request

As for Ajax request, the solution is a little different, but also quite simple. All you have to do is to add the csrf token to the head section of your HTML document and send it as an X-CSRF-TOKEN header with your request.

<head>
    <meta name="csrf-token" content="{{ csrf_token() }}" />
</head>
var request;
var form = $("form");
var data = {
    'email': form.find('input[name="email"]').val(),
    'password': form.find('input[name="password"]').val()
};
var headers = {
    'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}

request = $.ajax({
    url: "/register",
    type: "post",
    headers: headers,
    data: data
});

request.done(function (){
    console.log("It works!");
});

Solution #3 – Disabling CSRF validatation for some endpoints

For some specific endpoints, you can disable CSRF validation. Specific URLs can be excluded in the $except array of the VerifyCsrfToken class. This way you can exclude either the exact URL or group of URLs with a common prefix.

// /app/Http/Middleware/VerifyCsrfToken.php

class VerifyCsrfToken extends Middleware
{
    protected $except = [
        'payment/*',  // exclude all URLs wit payment/ prefix
        'user/add' // exclude exact URL
    ];
}

Excluding from CSRF protection should be used only for endpoints that are used by external applications (like payment providers). However, it’s also convenient to use api route file when you have many endpoints like that. They would be automatically excluded from the CSRF protection.

Conclusion

CSRF protection is by default enabled for all POST, PUT, PATCH, and DELETE requests within web routes file (those in api file are excluded). That approach has many advantages and allows developers to focus on more complex issues. However, that may be also confusing for less experienced programmers because requires more knowledge about a request lifecycle. Anyway, the three solutions I presented in this post are more than enough to handle all possible use cases and easily work with CSRF tokens in Laravel applications.

Столкнулся с проблемой возникновения 419 ошибки при попытке авторизации в приложении Ларавел.

Во-первых, стоит проверить CSRF: в форме, в мета-тегах, в скриптах.

У меня с CSRF всё было в порядке — в форме есть, в мета-тегах есть, но ошибка всё-равно возникает. Ларавель пишет «Whoops, something went wrong».

Проблема оказалась в том, что у меня была подключена админка, в которой тоже есть авторизация (мы использовали Backpack на проекте). Нужно в конфигах перенастроить гарды, чтобы всё работало как надо без ошибок:

'guards' => [
	'web' => [
		'driver' => 'session',
		'driver_prefix' => 'user_',
		'provider' => 'users',
	],
	'admin' => [
		'driver' => 'session',
		'driver_prefix' => 'admin_',
		'provider' => 'admins',
	],
],

Обратите внимание на префиксы. Раньше их не было, и сессия хранилась только одна и для приложения, и для админки. После такой настройки всё стало работать.

Не забудьте после изменения конфигов сбросить кеш:

php artisan config:cache

Поделиться

Поделиться

Отправить

Твитнуть

Вотсапнуть

Рейтинг 5
на основе 1 оценки

Кирилл Арутюнов

Разрабатываю сайты и онлайн-сервисы, использую для этого Laravel, Vue, WordPress. Люблю своё дело и занимаюсь этим уже больше 8 лет. Сделаю ваш проект — пишите!

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

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

Добавил форму в файл resourcesviewswelcome.blade.php

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

Добавлено в файл routesweb.php

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

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

419 Извините, срок вашей сессии истек. Обновите страницу и попробуйте еще раз.

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

40 ответов

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

Тогда

Добавьте SESSION_DOMAIN= в свой файл .env

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

А затем запустите php artisan cache:clear

случай 2: если проект запущен на сервере и у вас есть домен вроде «mydomain.com»

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

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

А затем запустите php artisan cache:clear


24

Saurabh Mistry
6 Фев 2019 в 23:14

Чтобы решить эту ошибку, вам сначала нужно вставить одну из следующих команд в тег формы.

@csrf ИЛИ {{ csrf_field }}

Если ваша проблема не решена, сделайте следующее: (Обратите внимание, что одна из вышеперечисленных команд должна быть в теге формы)

1.Вставьте одну из следующих команд в тег формы @csrf ИЛИ {{ csrf_field }}

2. Откройте файл .env и измените значения на «файл» в разделе SESSION_DRIVER.

3. Затем вам следует сбросить кеш laravel. введите ниже команды в терминале

php artisan view:clear
php artisan route:clear
php artisan cache:clear

php artisan config:cache

4. На последнем этапе отключите проект от сервера и снова нажмите на php artisan serve.

Надеюсь твоя проблема решена


8

hosein azimi
2 Мар 2020 в 15:36

Это может показаться излишним, но вы можете попробовать следующее:

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

<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>

// Именованный маршрут

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 должен отображать ту же строку, введенную вручную выше.


2

jeremykenedy
9 Ноя 2018 в 10:42

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

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

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


1

Splodge
14 Окт 2018 в 22:38

Для меня ошибка возникает, когда сеанс становится недействительным, и пользователь пытается отправить почтовый запрос. Csrf_token больше не действительны. поэтому я преодолеваю это, изменяя Handler.php в каталоге исключений и пытаюсь поймать исключение несоответствия токена, подобное этому.

Функция рендеринга была такой

public function render($request, Exception $exception)
{
    return parent::render($request, $exception);
}

Затем я модифицирую его, чтобы он выглядел так

public function render($request, Exception $exception)
{

    if ($exception instanceof IlluminateSessionTokenMismatchException){ // <<<=========== the Code
        if ($request->expectsJson()) {
            return response()->json(['error' => 'Unauthenticated.'], 401);
        }

        return redirect('/home')->with('message', 'You page session expired. Please try again');
    }
    return parent::render($request, $exception);
}

Просто вы выбираете маршрут, который может обрабатывать операцию обновления токена.


1

Ruberandinda Patience
1 Фев 2020 в 11:13

Это потому, что для формы требуется csrf. В версии 5.7 поменяли на @csrf

<form action="" method="post">
    @csrf
    ...

Референт: https://laravel.com/docs/5.7/csrf


51

David
10 Окт 2018 в 06:01

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

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

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


11

Bonish Koirala
6 Ноя 2018 в 15:25

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

@csrf

Исправил проблему


10

Karim Samir
14 Дек 2018 в 17:31

Это может быть проблема с вашей сессией. Поигравшись с этими настройками, я решил свою проблему. Для меня это оказался последний вариант.

  • Если вы используете «файл» в качестве драйвера сеанса, посмотрите хранилище / фреймворк / сеансы, если сеансы сохраняются после обновления. Если нет. Скорее всего, это связано с неправильными правами доступа к папке. Убедитесь, что ваше хранилище / папка имеет правильные права
  • Попробуйте отключить весь Javascript на своих страницах (отключив его через навигатор или внутри кода) и убедитесь, что ‘http_only’ => true,
  • Попробуйте использовать с https и без него
  • Убедитесь, что переменная SESSION_DRIVER НЕ равна нулю
  • Попробуйте переключиться между ‘encrypt’ => false и ‘encrypt’ => true,
  • Попробуйте изменить имя файла cookie ‘cookie’ => ‘laravelsession’,
  • Попробуйте либо установить для вашего SESSION_DOMAIN ваш фактический домен, либо null
  • Попробуйте переключиться между ‘secure’ => env (‘SESSION_SECURE_COOKIE’, false) и ‘secure’ => env (‘SESSION_SECURE_COOKIE’, true),

Источник: Сессия Laravel всегда изменяет каждое обновление / запрос в Laravel 5.4


10

Bram Janssen
11 Окт 2019 в 08:11

Попробуйте закомментировать AppHttpMiddlewareEncryptCookies::class в appHttpKernel.php У меня похожая проблема, и я решил ее. Наверное, не лучшее решение из-за безопасности, но, по крайней мере, оно работало.

Раньше я пробовал:

  • Очистить кэш
  • Создать новый ключ приложения
  • Запустить мое приложение в различных браузерах (Chrome 70, Mozilla Firefox 57 и IE 11)
  • Запустить мое приложение на другом компьютере
  • Закомментировать AppHttpMiddlewareVerifyCsrfToken::class в appHttpKernel.php
  • Закомментировать IlluminateSessionMiddlewareAuthenticateSession::class в appHttpKernel.php
  • Обновите и понизьте версию Laravel (между 5.6 и 5.7)

Но ничего из вышеперечисленного у меня не сработало.

ИЗМЕНИТЬ

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

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


8

Prasna Lukito
2 Июл 2019 в 12:51

419 | page эта ошибка означает проблему безопасности laravel, она означает, что поле токена csrf используется неправильно.

Использовать {{csrf_field}} и ваш вопрос будет решен.


8

Udhav Sarvaiya
23 Дек 2019 в 14:48

Измените свой @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>


6

Aghnat Atqiya
16 Фев 2019 в 12:54

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

Код формы:

<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;
});

Результат после отправки формы: Вывод после отправки формы

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


3

engrhussainahmad
11 Ноя 2018 в 15:34

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

protected $except = [
    //
    'doLogin.aspx',
    'create_coupon',
];


3

Qasim Ali
11 Ноя 2018 в 16:33

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

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

'domain' => env('SESSION_DOMAIN', 'example.com'),


3

ismail bangee
20 Май 2019 в 22:52

Добавьте токен csrf и ваша проблема будет решена. {{csrf_token}} или @csrf


3

samair ali
1 Окт 2019 в 22:19

В моем случае отсутствовал ?> в конце routes / web.php.


3

Tiago Martins Peres
8 Апр 2021 в 10:43

Пожалуйста, также обновите CSRF в заголовке

<meta name="csrf-token" content="{{ csrf_token() }}">

Обновить CSRF в форме

@CSRF

Если у вас уже есть CSRF в заголовке и форме, то Перейдите к config/session.php и обновите

'domain' => env('SESSION_DOMAIN', 'example.com'),[ Only Domain name without https ]


3

Mehmood Umer
17 Мар 2022 в 14:31

Хотя в форме есть @csrf, она все еще показывает 419 pages has expired

Я решил это после обновления опции SESSION_SECURE_COOKIE до false в config / session.php

'secure' => env('SESSION_SECURE_COOKIE', false)

Чем очистить кеш


2

Kakada NEANG
24 Июл 2020 в 09:55

2021, я столкнулся с этой ошибкой при применении всех вышеперечисленных решений, каждый мой маршрут выдавал 419. Мое приложение отлично работало на локальном хосте, но 419 на сервере. Затем я получил решение при исправлении файла .env на производстве, remove sanctum variables из .env и установил 'secure' => env('SESSION_SECURE_COOKIE', null) в config/session.php


2

Abid_niazi_15
7 Июл 2021 в 07:53

В вашем Http/Kernel.php

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

IlluminateSessionMiddlewareAuthenticateSession::class,

В вашем веб-массиве промежуточного программного обеспечения

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


1

Mathieu Ferre
6 Ноя 2018 в 15:11

По умолчанию у меня не было этой проблемы. Итак, я сделал chmod -R 644 sessions воспроизвести проблему.

enter image description here

Впоследствии я дал разрешения на папку сессий chmod -R 755 sessions

Теперь мой код проекта снова работает.

enter image description here

Причина, по которой это происходит, заключается в том, что вы храните кеш в файле с отсутствием разрешений на запись.

Файл конфигурации сеанса хранится в config / session.php. Обязательно ознакомьтесь с вариантами, доступными вам в этом файле. По умолчанию Laravel настроен на использование драйвера файлового сеанса, который хорошо работает для многих приложений. В производственных приложениях вы можете рассмотреть возможность использования драйверов memcached или redis для еще более высокой производительности сеанса.

Решения:

1 — Как я исправил выше, вы можете дать 755 разрешений для папки сессий. 2 — Вы можете использовать другую конфигурацию драйвера сеанса.

file — сеансы хранятся в хранилище / framework / sessions. cookie — сеансы хранятся в безопасных зашифрованных файлах cookie. база данных — сеансы хранятся в реляционной базе данных. memcached / redis — сеансы хранятся в одном из этих быстрых хранилищ на основе кеша. array — сеансы хранятся в массиве PHP и не сохраняются.

Имей в виду; Если вы хотите использовать memcached / redis, вам необходимо, чтобы они были установлены на вашем сервере, или ваш контейнер docker redis должен быть запущен.


1

Anar Bayramov
12 Ноя 2018 в 11:58

Обратите внимание, что вы получаете ошибку 419, если пытаетесь загрузить большой файл, размер которого превышает ограничение на размер почтового файла. В этом случае вы можете увеличить как upload_max_filesize, так и post_max_size до разумной суммы (например, 10M или 20M в зависимости от вашего варианта использования и ресурсов), проверьте здесь: https://stackoverflow.com/a/2184541/2100489

Но это может вызвать проблемы с потреблением ресурсов, например с пропускной способностью и хранилищем. В качестве решения вы можете проверить размер файла перед отправкой формы и показать предупреждающее сообщение.


1

Kiafar
13 Авг 2019 в 14:43

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

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

Route::group(array('middleware' => ['web']), function () {
  Route::post('/foo', function () {
     echo 1;
     return;
  });
});


1

Udhav Sarvaiya
23 Дек 2019 в 14:49

В моем случае удаление bootstrap/cache устранило проблему


0

Ahmad Mobaraki
9 Янв 2020 в 08:16

Перед чтением ниже убедитесь, что в вашей форме есть @csrf или {{ csrf_field() }}
как

<form method="post">
@csrf <!-- {{ csrf_field() }} -->
... rest of form ...
</form>

Сообщение об ошибке Session Expired или 419 Page Expired в Laravel появляется, потому что где-то происходит сбой проверки вашего токена csrf, что означает, что промежуточное ПО AppHttpMiddlewareVerifyCsrfToken::class уже включено. В форму уже добавлена ​​блейд-директива @csrf, что тоже должно быть хорошо.

Затем другая область для проверки — это сеанс. Проверка токена csrf напрямую связана с вашим сеансом, поэтому вы можете проверить, работает ли ваш драйвер сеанса, например, неправильно настроенный Redis может вызвать проблему.

Возможно, вы можете попробовать переключить драйвер / программное обеспечение сеанса из файла .env, поддерживаемые драйверы приведены ниже

Поддерживаемые драйверы сеанса в Laravel 5, Laravel 6 и Laravel 7 (ссылка на документ)

  • file — сеансы хранятся в хранилище / framework / sessions.
  • cookie — сеансы хранятся в безопасных зашифрованных файлах cookie.
  • database — сеансы хранятся в реляционной базе данных.
  • memcached / redis — сеансы хранятся в одном из этих быстрых хранилищ на основе кеша.
  • array — сеансы хранятся в массиве PHP и не сохраняются.

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

Возможные сценарии с высокой вероятностью ошибок

  • Возможно, сеансы на основе файлов могут не работать из-за проблем с правами доступа к каталогу /storage (быстрый поиск в Google даст вам решение), также помните, что установка 777 для каталога никогда не является решением.

  • В случае с драйвером базы данных, ваше соединение с БД может быть неправильным, или таблица sessions может не существовать или неправильно настроена (неправильная часть конфигурации была подтверждена как проблема в соответствии с комментарием @Junaid Qadir).

  • Конфигурация redis/memcached неверна или одновременно обрабатывается другим фрагментом кода в системе.

Было бы неплохо выполнить php artisan key:generate и сгенерировать новый ключ приложения, который, в свою очередь, сбрасывает данные сеанса.

Очистить кеш браузера СЛОЖНО , я обнаружил, что виновниками являются Chrome и Firefox, больше, чем я могу вспомнить.

Узнайте больше о том, почему важны ключи приложений


212

Tiago Martins Peres
8 Апр 2021 в 10:34

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


0

Kees Hessels
7 Дек 2018 в 20:21

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


0

Duy Nguyen
28 Мар 2019 в 04:59

В моем случае это очень смешно. Я получаю ошибку 419, когда помещаю Auth::routes() в начало файла маршрута.

Auth::routes();

Route::middleware('auth')->group(function () {
    Route::get('/', 'DashboardController@index')->name('dashboard');
});

И я исправил ошибку, переместив Auth::routes(); в конец файла маршрута.

Route::middleware('auth')->group(function () {
    Route::get('/', 'DashboardController@index')->name('dashboard');
});

Auth::routes();

Может быть, это поможет и твоему делу. Удачи.


0

lyhong
28 Июн 2019 в 19:42

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


0

Ahmad Yousef
3 Ноя 2019 в 16:17

Добавьте в форму в .blade.php файл {{ csrf_field() }} или @csrf как это

<form method='POST' action='route('exampleRoute')'>
   {{ csrf_field() }} or @csrf
   ....
   ....
</form>


0

Guvanch Hojamov
4 Мар 2020 в 15:30

Откройте командную строку cmd в вашем проекте.

1. команда

php artisan config:cache

2. команда

php artisan route:clear


2

Biblbroks42
4 Мар 2020 в 15:59

Это должно сработать, если вы попробуете все эти шаги:

  1. Убедитесь, что ваш сеанс правильно настроен. Самый простой способ — сделать его файловым и убедиться, что папка хранилища имеет разрешение chmod 755, а затем в вашем .env вы установите его, как показано ниже, драйвер файлового сеанса — самый простой способ установить.

    SESSION_DRIVER=file
    SESSION_DOMAIN=
    SESSION_SECURE_COOKIE=false
    
  2. Убедитесь, что папка Cache очищена и доступна для записи, вы можете сделать это, выполнив команду artisan ниже.

    php artisan cache:clear
    
  3. Убедитесь, что права доступа к папке установлены правильно, они должны быть настроены, как показано ниже:

    sudo chmod -R 755 storage
    sudo chmod -R 755 vendor
    sudo chmod -R 644 bootstrap/cache
    
  4. Убедитесь, что в вашей форме есть токен @csrf.

Надеюсь, это решит вашу проблему.


8

Kamaro
15 Июл 2020 в 09:35

Перейдите в config / sessions.php

Найти строку

'secure' => env('SESSION_SECURE_COOKIE', true),

Измените его на false

'secure' => env('SESSION_SECURE_COOKIE', false),

Если для этого параметра установлено значение TRUE, браузер потребует от вас использовать протокол HTTPS, в противном случае он не будет сохранять сеанс. Поскольку это не действует


4

Rafayel
4 Авг 2020 в 11:11

У вас тоже есть csrf в шапке вашего приложения?

<meta name="csrf-token" content="{{ csrf_token() }}">


1

iranimij
12 Мар 2020 в 09:04

Я просто просмотрел это и остановился здесь, чтобы получить ответ. В моем случае решение было очистить историю браузера.


1

Isma’el
29 Авг 2020 в 20:43

У меня тоже была такая проблема, и я обнаружил, что файлы сеанса заблокированы для записи. Итак, я не знаю, запускаете ли вы свой 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. Разрешить файлы cookie в браузере, чтобы токен можно было установить в файлах cookie.
  2. Убедитесь, что вы используете @csrf в своем файле лезвия

Форма должна быть примерно такой

<form method="POST" action="{{ route('login') }}">
@csrf
.......
</form>


0

Koen Hollander
9 Ноя 2018 в 15:40

У меня была такая же проблема в моей среде разработки. Это было решено с использованием http://127.0.0.1:8000 вместо http://localhost:8000.


0

Marc Brillault
19 Дек 2019 в 02:09

Если у вас уже есть директива csrf , возможно, вы изменили способ запуска сеансов.

В config/session.php проверьте поле ‘secure’ . Он должен быть установлен на false, если https недоступен на вашем сервере.

Вы также можете поместить SESSION_SECURE_COOKIE=FALSE в свой файл .env (корневой каталог).


2

Udhav Sarvaiya
23 Дек 2019 в 14:50

0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии

А вот еще интересные материалы:

  • Яшка сломя голову остановился исправьте ошибки
  • Ясность цели позволяет целеустремленно добиваться намеченного исправьте ошибки
  • Ясность цели позволяет целеустремленно добиваться намеченного где ошибка
  • 41668 ошибка форд мондео 4
  • 41572 ошибка опель зафира б