419 Ошибка в Laravel 11 при регистрации

Я сталкиваюсь со следующей ошибкой в ​​своей новой установке laravel 11 и vue, когда пытаюсь отправить форму, в данном случае форму регистрации.

419 | Срок действия страницы истек

Я проверил этот вопрос и да, у меня есть @csrf в моей регистрационной форме и

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

Действия по воспроизведению

  1. Я установил новый экземпляр laravel 11:
 composer create-project laravel/laravel test
 cd test/
  1. Я добавил пакет laravel/ui
 composer require laravel/ui
  1. Я добавил vue и пользовательский интерфейс аутентификации
 php artisan ui vue --auth

Это дало мне предупреждение:

Файл [Controller.php] уже существует. Вы хотите заменить это? (да/нет) [да]

Я набрал yes, затем [Enter]

  1. Я установил пакеты npm и инициализировал vite
 npm install && npm run dev
  1. Инициализировал сервер разработки и попытался зарегистрироваться.
 php artisan serve

Редактировать Там же были сделаны дополнительные шаги repo. Мы работаем с mongodb, поэтому также добавили конфигурации Mongodb.

  1. Установил пакет laravel/mongodb
 composer require mongodb/laravel-mongodb
  1. Добавлены конфигурации в config/database.php, как показано ниже:
  ...
 'mongodb' => [
          'driver' => 'mongodb',
          'host' => env('DB_HOST', '127.0.0.1'),
          'port' => env('DB_PORT', 27017),
          'database' => env('DB_DATABASE', 'assets'),
          'username' => env('DB_USERNAME', ''),
          'password' => env('DB_PASSWORD', ''),
          'options' => [
              'database' => env('DB_AUTHENTICATION_DATABASE', 'admin'),
          ],
      ],

  ...
  1. Обновлен файл .env, как показано ниже:

DB_CONNECTION=mongodb
DB_HOST=127.0.0.1
DB_PORT=27017
DB_DATABASE=testdb
DB_USERNAME=
DB_PASSWORD=
...

Я надеюсь, что есть кто-то с решением.

Обратите внимание: я попробовал установить laravel 10 и выполнить те же процессы, и все работает отлично. Что изменилось в laravel 11? Любая помощь приветствуется.

Редактировать Ниже содержимое моего bootstrap/app.php

<?php

use Illuminate\Foundation\Application;
use Illuminate\Foundation\Configuration\Exceptions;
use Illuminate\Foundation\Configuration\Middleware;

return Application::configure(basePath: dirname(__DIR__))
    ->withRouting(
        web: __DIR__.'/../routes/web.php',
        commands: __DIR__.'/../routes/console.php',
        health: '/up',
    )
    ->withMiddleware(function (Middleware $middleware) {
        //
    })
    ->withExceptions(function (Exceptions $exceptions) {
        //
    })->create();

и register.blade.php

<form method = "POST" action = "{{ route('register') }}">
  @csrf
    <div class = "row mb-3">
    // Rest of code

Это странно, я попробовал это на новой установке Laravel 11 и не столкнулся с той же проблемой. Я попробовал те же шаги, что и в вашем вопросе. Не могли бы вы обновить свой вопрос содержимым вашего bootstrap/app.php файла?

Eyad Bereh 12.04.2024 12:58

Я добавил содержимое в вопрос. И еще, как ты получил новую установку? Используя эту команду: composer create-project laravel/laravel test

AntonyMN 12.04.2024 13:03

Да, я только что скопировал команды из ваших вопросов, и все они сработали нормально. В любом случае файл boostrap/app.php мне кажется хорошим. Хорошо, давайте попробуем что-нибудь еще: проверим файл .env и посмотрим на переменную SESSION_LIFETIME. Установлено ли 0?

Eyad Bereh 12.04.2024 13:07

Нет, это 120: SESSION_LIFETIME=120

AntonyMN 12.04.2024 13:08

@EyadBereh Я добавил некоторую информацию, которой у меня раньше не было. При использовании sqlite (по умолчанию в Laravel 11) он работает, но когда я добавил установку mongodb, возникает ошибка.

AntonyMN 12.04.2024 13:43

Я добавил фрагмент register.blade.php, где инициализирую форму регистрации. Это страница регистрации по умолчанию, я не вносил в нее никаких изменений.

AntonyMN 12.04.2024 13:55

Проблема здесь, очевидно, как-то связана с MongoDB (о которой я ничего не знаю). Попробуйте переключить переменную SESSION_DRIVER на file вместо значения по умолчанию database.

Eyad Bereh 12.04.2024 14:04

Если база данных используется по умолчанию, просто убедитесь, что вы создали для нее таблицу. php artisan session:table --connection=mongodb На это же указывает и ошибка. Он не может сохранять сеансы, поэтому каждый запрос получает новый сеанс, но это означает, что даже если он получил токен CSRF, соответствующий предыдущему сеансу, он больше не соответствует новому.

rozsazoltan 12.04.2024 14:05

@EyadBereh Это ответ. Когда я переключил SESSION_DRIVER=file, все заработало отлично. Вы должны указать это как ответ, чтобы я проголосовал за него, потому что кто-то еще застрял на этом.

AntonyMN 12.04.2024 14:06

Привет, у меня возникла проблема с laravel 10. Мне очень хотелось бы понять, почему это происходит. Почему я не могу использовать базу данных в качестве драйвера сеанса? ты это понял?

matt 29.05.2024 00:15

Идея заключалась в том, что если вы хотите использовать SESSION_DRIVER: database, то сначала запустите php artisan migrate.

AntonyMN 29.05.2024 13:47
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
2
11
898
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Хотя в вопросе об этом прямо не упоминается, я полагаю, что вы также переключили базу данных по умолчанию на MongoDB.

Поскольку это было настроено таким образом после установки, может потребоваться повторно создать таблицу для сеанса.

В Laravel 11 эта команда автоматически выполнялась бы php artisan migrate, но она выполнялась до установки MongoDB. Я предполагаю, что после перехода на новую базу данных вам придется повторно запустить команду migrate отдельно. В противном случае вручную можно создать только таблицу сеансов.

php artisan make:session-table

Больше информации

Это также приемлемый ответ. Я не запускал команду php artisan migrate.

AntonyMN 12.04.2024 14:18
Ответ принят как подходящий

Похоже, вы используете драйвер database в качестве драйвера сеанса. Это значение по умолчанию, начиная с Laravel 11.

Я уверен, что эта проблема как-то связана с MongoDB, но я бы посоветовал вам использовать драйвер сеанса file. Вы можете сделать это, установив для переменной SESSION_DRIVER внутри вашего .env файла значение file:

SESSION_DRIVER=file

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

Начиная с Laravel 11, использование базы данных стало стандартным. Конфигурация сессии Сначала я не понял, в чем проблема... Я все еще имел в виду старые параметры. Кстати, не могли бы вы предоставить некоторую информацию о том, почему вы рекомендуете использовать именно файлы? Просто оставьте комментарий здесь, если есть хорошая статья или краткое изложение об этом, мне было бы интересно узнать больше.

rozsazoltan 12.04.2024 14:19

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

Eyad Bereh 12.04.2024 15:25

@rozsazoltan Здесь я хотел бы упомянуть еще одну вещь: вы взаимодействуете с сеансами через помощник session(), чтобы получить нужные данные, и вам не важно, хранятся ли они в красивой таблице базы данных или в беспорядке. файл, для вас это не имеет значения, вы просто получаете свои данные, и это все, что имеет значение.

Eyad Bereh 12.04.2024 15:27

База данных @rozsazoltan в качестве хранилища сеансов может быть полезна в таких сценариях, когда сеанс может использоваться несколькими внешними интерфейсами, но вы все равно можете настроить для этой цели кластер Redis, он работает очень быстро и обеспечивает лучшую масштабируемость.

Eyad Bereh 12.04.2024 15:28

Спасибо, что поделились своим мнением и точкой зрения! Очень полезно изучить функциональность с разных точек зрения. Теперь я полностью согласен с вашим комментарием о том, что для очень простого небольшого проекта использования файлов может быть достаточно и даже лучше. Однако если необходима балансировка нагрузки или лучшая масштабируемость, рекомендуется плавно перейти к базе данных или настроить Redis или Memcache для гораздо большей производительности.

rozsazoltan 12.04.2024 16:29

@rozsazoltan Всегда пожалуйста! Я рад видеть, что здесь, на Stack Overflow, есть хорошие люди, которые готовы обсуждать и говорить, а не просто голосовать против.

Eyad Bereh 12.04.2024 21:12

Другие вопросы по теме