Ошибка 419 page expired что значит

Опубликовано:

  • Backend
  • Laravel

Использование CSRF-токенов добавляет дополнительный уровень безопасности, подтверждая, что запрос исходит от того же приложения, а не от вредоносного источника. Laravel обеспечивает встроенную защиту от CSRF-атак путём генерации и проверки CSRF-токенов.

Использование CSRF-токенов добавляет дополнительный уровень безопасности, подтверждая, что запрос исходит от того же приложения, а не от вредоносного источника. Laravel обеспечивает встроенную защиту от CSRF-атак путём генерации и проверки CSRF-токенов. Однако его неправильное использование может привести к ошибке: 419 Page Expired.

Чтобы устранить ошибку 419 Page Expired, необходимо убедиться, что CSRF-токен включён в отправляемую форму, добавив @csrf после между открывающим и закрывающим тегами <form>. При этом в форму будет автоматически добавлено скрытое поле input, содержащее CSRF-токен.

Вот пример того, как будет выглядеть обновлённая форма с использованием @csrf:

<form method="POST" action="/your-route">
@csrf
<!-- Остальные элементы формы -->
</form>

В качестве альтернативы вы можете использовать csrf_field() в <form>, которая выглядит следующим образом:

<form method="POST" action="/your-route">
{{ csrf_field() }}
<!-- Остальные элементы вашей формы -->
</form>

Обратите внимание, что ошибка 419 Page Expired может возникнуть и при наличии токена. Обычно это означает, что пользователь был неактивен в течение определённого времени и срок действия токена истёк. Это можно исправить, просто обновив страницу и отправив форму заново.

В примерах кода выше мы узнали, как применить токен к обычной форме. Читайте дальше, чтобы узнать, как добавить CSRF-токен в запросы Ajax POST с помощью jQuery или Axios. Мы также узнаем, как отключить проверку CSRF-токена для определённого маршрута или всего приложения. Наконец, мы ответим на некоторые часто задаваемые вопросы о том, почему GET-запрос не требует CSRF верификации и почему API вообще не требуют её.

Как исправить 419 (unknown status) с помощью Ajax POST (jQuery)

При отправке формы с помощью AJAX из jQuery вы можете получить ответ об ошибке — 419 (unknown status).

Используя Laravel/jQuery, вы можете исправить ошибку 419 (unknown status), добавив вызов csrf_token() в раздел <head> и вызвав $.ajaxSetup, для настройки jQuery на добавление токена в заголовки всех последующих POST-запросов.

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

  1. Добавьте CSRF-токен в раздел <head>:

    <head>
    <meta name="csrf-token" content="{{ csrf_token() }}">
    </head>
  2. Добавьте вызов $.ajaxSetup:

    <script>
    $.ajaxSetup({
    headers: {
    'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
    }
    });
    </script>
  3. Добавьте код jQuery для отправки POST-запроса:

    <script>
    // Отправляем сокращенный jQuery POST:
    $.post('/formProcessor');

    // Или отправьте обычный jQuery POST:
    $.ajax({
    type: "POST",
    url: "/formProcessor"
    });
    </script>

Полный пример (маршрут и вид):

routes/web.php:

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

Route::post('/formProcessor', function () {
return response('', 200);
});

/resources/views/form-jquery-ajax.blade.php:

<!DOCTYPE html>
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>jQuery Ajax POST Example</title>
<meta name="csrf-token" content="{{ csrf_token() }}">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.4/jquery.min.js"></script>
</head>
<body>
<button class="sendButton">Click me</button>
<script>
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
$('.sendButton').click(function(){
$.post('/formProcessor');
});
</script>
</body>
</html>

Использование Axios для отправки Ajax POST (нет необходимости устанавливать CSRF-токен)

Axios — это HTTP-клиент для JavaScript. Он значительно упрощает отправку AJAX POST-запросов. Он делает это, устраняя необходимость включать jQuery, устанавливать токен или вызывать функцию настройки. Я рекомендую использовать Axios в любом проекте, который отправляет Ajax-запросы из JavaScript.

По умолчанию Laravel поставляется с Axios и Vite. Для того чтобы использовать Axios, нам просто нужно выполнить следующие команды:

npm install
npm run build

Эти команды установили Axios и создали правильный .js файл в папке /public.

Теперь вы можете включить app.js и использовать Axios в своём коде для отправки POST-запроса, как показано в этом примере:

/resources/views/form-axios-ajax.blade.php:

<!DOCTYPE html>
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>jQuery Ajax POST Example</title>
@vite(['resources/js/app.js'])
</head>
<body>
<button class="sendButton">Click me</button>
<script>
document.querySelector('.sendButton').addEventListener('click', function (event) {
axios.post('/formProcessor', {
// Полезная нагрузка запроса
data: 'your-data'
}).then(response => {
// Обработка ответа
alert('successful!');
}).catch(error => {
// Обработка ошибки
console.error(error);
});
});
</script>
</body>
</html>

Как отключить проверку CSRF-токенов в Laravel

Чтобы отключить проверку токена CSRF для всех маршрутов в Laravel, вы можете удалить промежуточное программное обеспечение CSRF, выполнив следующие шаги:

  1. Откройте файл app/Http/Kernel.php в вашем проекте Laravel.

  2. Найдите свойство $middleware в классе Kernel.

  3. Найдите middleware класс VerifyCsrfToken, который обычно указывается как \App\Http\Middleware\VerifyCsrfToken::class.

  4. Удалите или закомментируйте строку, содержащую middleware класс VerifyCsrfToken.

    Например, измените:

    app/Http/Kernel.php:

    \App\Http\Middleware\VerifyCsrfToken::class,

    на

    // \App\Http\Middleware\VerifyCsrfToken::class,
  5. Сохраните изменения в файле Kernel.php.

Удалив middleware VerifyCsrfToken, проверка маркера CSRF будет отключена для всех маршрутов в вашем приложении Laravel. Однако помните, что этот подход устраняет важную меру безопасности, поэтому используйте его с осторожностью и только в конкретных случаях, когда защита CSRF не требуется.

Как отключить CSRF-токен только для определённого маршрута

Чтобы отключить проверку CSRF-токена для определённого маршрута в Laravel, вы можете исключить маршрут из защиты CSRF, изменив middleware CSRF. Вот как это можно сделать:

  1. Откройте файл app/Http/Middleware/VerifyCsrfToken.php в вашем проекте Laravel.

  2. В классе VerifyCsrfToken найдите свойство except. Это свойство определяет URI, которые должны быть исключены из проверки CSRF-токенов.

  3. Добавьте URI маршрута, который вы хотите исключить из защиты CSRF, в массив except. Например, если вы хотите исключить маршрут /example из проверки CSRF, добавьте следующую строку в массив except:

    app/Http/Middleware/VerifyCsrfToken.php:

    protected $except = [
    '/example',
    ];

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

  4. Сохраните изменения в файле VerifyCsrfToken.php.

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

Добавив конкретный маршрут в массив except в middleware VerifyCsrfToken, Laravel обойдёт проверку CSRF-токена для этого маршрута. Важно отметить, что хотя этот подход может быть полезен в определённых сценариях, отключение CSRF защиты должно выполняться осторожно и только в случае необходимости для обеспечения безопасности вашего приложения.

Почему маршруты API Laravel не используют проверку CSRF-токена

Стоит отметить, что в Laravel middleware для проверки CSRF-токенов намеренно не добавляется автоматически в маршруты API.

Маршруты API Laravel не используют проверку CSRF (Cross-Site Request Forgery) по умолчанию из-за своей stateless природы. API обычно работают в режиме stateless, то есть они не хранят данные сессии и не поддерживают состояние клиента между запросами.

Вместо этого API используют механизмы аутентификации на основе токенов, такие, как JWT (JSON Web Tokens) или OAuth для аутентификации и авторизации запросов. Такая аутентификация на основе токенов обеспечивает безопасный механизм без необходимости использования CSRF-токенов. Однако для традиционных веб-форм защита от CSRF остаётся крайне важной.

Почему к GET-запросам Laravel не применяется проверка CSRF-токена

CSRF-токен требуется в любых запросах POST, PUT, PATCH или DELETE, которые отправляются с веб-сайта. Но почему он не требуется, когда мы отправляем GET-запрос?

GET-запросы обычно используются для получения данных и считаются безопасными, поскольку они не должны изменять данные на стороне сервера. Поскольку CSRF атаки основаны на несанкционированных модификациях, применение CSRF-токенов к GET-запросам не требуется.

Для полноты картины стоит упомянуть, что запросы OPTIONS и HEAD также считаются запросами только для чтения, которые, как и GET-запросы, не требуют проверки CSRF-токена. Как показывает официальный код VerifyCsrfToken Middleware:

VerifyCsrfToken.php:

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

Заключение

В этой статье рассматривалось, как устранить ошибки 419 Page Expired и CSRF token mismatch в Laravel при использовании обычных форм или Ajax-запросов POST, отправленных с помощью jQuery или Axios.

Кроме того, в статье было показано, как можно отключить проверку CSRF-токена для определённого маршрута и как её можно отключить полностью. Наконец, мы также объяснили, почему маршруты API не используют проверку CSRF-токена по умолчанию и почему GET-запросы в Laravel не проверяют токен CSRF.

Надеюсь, эта статья будет вам полезна. Счастливого кодинга!

In a local server the following laravel project working fine, But When the project upload on online server it’s showing the problem.

When trying to login then its show:

419 | page expired.

I have cleared route, view, cache, and config when I uploaded it on online serve.

miken32's user avatar

miken32

42k16 gold badges111 silver badges154 bronze badges

asked Jan 30, 2020 at 6:51

Belal Khan's user avatar

1

This error occurs due to CSRF token verification failure, misconfigured cache, permissions, improper session settings. This error shows up when a user submits a post request. You can fix it by doing belows:

  1. CSRF token verification failure
    The most common reason for the 419 error is CSRF token failure.
    Cross-site request forgery is a unique, encrypted value generated by the server. This is included in the HTTP request of the client. Later the server verifies it. If this fails, it leads to session expired error.
    So, you check the CSRF setting in the Laravel config.

  2. Session expired error due to cache
    Sometimes, the cache can also lead to session expired error in front-end. This can be both the server cache and browser cache. So, clear the server cache using php artisan cache:clear.

  3. Laravel file and folder permissions
    Similarly, improper file or folder permission can also lead to errors. Usually, web servers need write-permissions on the Laravel folders storage and vendor. Also, session storage needs write-permission. So, give permissions as,

chmod -R 755 storage

chmod -R 755 vendor

chmod -R 644 bootstrap/caches
  1. Laravel session setting
    Last but not least, session settings can also cause a 419 error. The app/config/session.php is the session config file. Check for a few important parameters – domain and secure.
'domain' => env('SESSION_DOMAIN', null),
'secure' => env('SESSION_SECURE_COOKIE', false), // in case of cookie

These step by step approach fixes the error and make Laravel working again.

answered Jan 30, 2020 at 7:38

Farhod Nematov's user avatar

1

Just put {{ csrf_field() }} like others have said above, below login form, Laravel does not allow request forgery attacks.

Udhav Sarvaiya's user avatar

answered Jan 30, 2020 at 7:44

konz laugoko's user avatar

1

We get this error page when CSRF token get expired. This issue generally happens when you load a page with form(eg. login page, registration page) then after a long time you submit the form. We get this because, the CSRF is expired by the time.

To solve this:

You can increase the lifetime in the config/session.php file.

answered Jan 30, 2020 at 7:05

Imran's user avatar

ImranImran

4,5922 gold badges18 silver badges37 bronze badges

1

Your error seems to be related to ‘csrf_token’. Either it is missing the csrf token or your route needs to be put in the exclusion list. See laravel doc for help.

answered Jan 30, 2020 at 7:16

A.G.'s user avatar

A.G.A.G.

1942 silver badges10 bronze badges

There’s also the SESSION_LIFETIME key in your .env file.

It refers to the number of minutes to hold the session active, in minutes.

I had issues with mine set to 1 minute for testing, and then I forgot about it, so my CSRF would expire quickly while filling out forms.

I set it to 60 minutes to fix:

SESSION_DRIVER=file
SESSION_LIFETIME=60

answered Nov 20, 2020 at 16:50

agm1984's user avatar

agm1984agm1984

15.6k6 gold badges91 silver badges113 bronze badges

In case you’re using the database driver for your sessions and either UUIDs or ULIDs for your user IDs, make sure the user_id field in the sessions table reflects the correct format. If it’s a bigint unsigned field, it’ll cause 419 errors if you’re using ULIDs or UUIDs.

answered Aug 12 at 6:12

Justin Russell's user avatar

Justin RussellJustin Russell

1,0101 gold badge9 silver badges16 bronze badges

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

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

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

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

Сообщение об ошибке Session Expired или 419 Page Expired в larvel появляется из-за того, что где-то не удается проверить ваш токен csrf, что означает, что App\Http\Middleware\VerifyCsrfToken::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 для обновления токена. Вот ссылке как стартер для решения вашей проблемы.

Have you ever been working on a web page and refreshed it only to find an HTTP 419 error code? If so, you’re not alone – this common problem can affect websites that rely heavily on server-side scripting languages like PHP. But what does the Error Code Status for ‘HTTP 419 (Page Expired)’ actually mean and how do you go about fixing it? In this post, we’ll cover everything from explaining how the error is caused to offering up solutions.t

What are the http status codes

HTTP status codes are three-digit numbers that are returned by a web server in response to a client’s request using Hypertext Transfer Protocol (HTTP). These codes indicate the status of the request and whether it was successful or not. Some common status codes include 200 OK, 404 Not Found, and 500 Internal Server Error.

These codes can be separated into five classes, with the initial digit in each http status code showing which class it falls into. Here is an overview of these categories:

  • 1xx: Informational – These codes verify that your request has been acknowledged and is currently being processed.
  • 2xx: Successful – An indication of success, these codes signify that the requested resource is being sent back to you. You can rest assured knowing that your request has been fulfilled!
  • 3xx: Redirection – To complete the request, clients must adhere to these codes that signify further steps of action.
  • 4xx: Client Error – These codes demonstrate that the client’s inquiry contained a mistake, such as an excluded or incorrect parameter.
  • 5xx: Server Error – These codes signalize that the server encountered an issue and couldn’t process the initial request.

What is the 419 Page Expired error code

The 419 Page Expired error code is a 4xx status code, specifically in the 419 range. It indicates that request failed and the server was unable to process the request because the session has expired. This can happen if the user has been inactive for too long or if their session has been terminated on the server side. This error typically occurs when a user attempts to make a request using any http method such POST request (a request method used to submit data to a server) using an outdated or invalid token.

The 419 Page Expired error code is not an official HTTP status code defined in the HTTP/1.1 specification. It is not officially recognized by the Internet Assigned Numbers Authority (IANA) as a standard HTTP status code. This error response code is specific to certain web applications, frameworks, or libraries, and its use and meaning may vary depending on the implementation.

It’s worth noting that, although the HTTP status codes are standardized, web developers and framework authors may choose to use non-standard codes for specific purposes. For example, some developers may use the 419 status code to indicate a session timeout or expired CSRF token, while others may use different codes or custom error messages to convey the same information. Therefore, it’s important to check the documentation of the specific web application or framework to understand the meaning and handling of the 419 Page Expired error code.

Causes of 419 Page Expired error code (list explained in details)

There are several causes of the 419 Page Expired error code:

  • Session Timeout: If a user has been inactive for too long, their session may expire on the server. This can cause the 419 error when the user attempts to perform an action that requires a valid session.
  • Server-side Session Termination: The server may terminate a session for various reasons, such as security or maintenance. This can also cause the 419 error when the user attempts to perform an action that requires a valid session.
  • CSRF Token Invalidation: Some websites use CSRF tokens to protect against cross-site request forgery. These tokens can expire, and if a user attempts to perform an action with an expired token, the server will return a 419 error due to a csrf token verification failure.
  • Incorrect URL: Some websites use URLs that include session information, such as a session ID. If a user attempts to access a page with an incorrect or outdated URL, they may receive a 419 error.

How to fix 419 Page Expired error code (explain in details)

  • Refresh the page: If the error is caused by a session timeout, simply refreshing the page may re-establish the session and allow the user to continue.
  • Log in again: If the error is caused by a server-side session termination, the user may need to log in again to re-establish their session.
  • Check the URL: If the error is caused by an incorrect URL, the user should check the URL and ensure it is correct.
  • Report the error to the website administrator: If the error persists, the user can report it to the website administrator for further investigation.

Similar http statuses to 419 Page Expired

There are several similar HTTP status codes to the 419 Page Expired error code that indicate a similar issue of session expiration or authentication failure:

401 Unauthorized: This status code indicates that the user is not authenticated and must provide valid credentials before being granted access to the requested resource.

403 Forbidden: This status code indicates that the user is authenticated but lacks the necessary permissions to access the requested resource.

407 Proxy Authentication Required: This status code indicates that the user must authenticate with a proxy before being granted access to the requested resource.

440 Login Timeout: This is a non-standard status code, but it’s similar to a 419 error, it indicates that the user’s session has expired and the user needs to re-login again.

494 Request Header Too Large: This is a non-standard status code, it’s similar to a 419 error, it indicates that the request header contains too much information and the server can’t process it.

All HTTP status codes by categories

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.

Понравилась статья? Поделить с друзьями:

Интересное по теме:

  • Ошибка 420 рено логан
  • Ошибка 4181 терминал сбербанка
  • Ошибка 418 я чайник
  • Ошибка 418 триколор
  • Ошибка 418 кинопоиск

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

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