8.6.12
У меня есть HomeController, который отрабатывает на маршрут «/» и данный контроллер создает рандомное число, записывает его в сессию и возвращает шаблон home.blade.php.
В шаблоне home.blade.php есть форма и когда я делаю отправку данной формы, то прежде чем следующий FormController начнет обрабатывать форму, непонятно почему вызывается старый HomeController, создает новое рандомное число и перезаписывает его в сессии. И уже в FormController я вижу новое число, хотя мне нужно старое, которое было до отправки формы. Что это может быть? Перечитал кучу форумов, то нигде толкового ответа нет. Пробовал оборачивать роуты в Route::group(['middlewareGroups' => ['web']], function () {}), то не помогло.
сколько запросов и куда уходит при отправке формы? кто является родителем для FormController?Как дебажите?
Это такой себе велосипед против CORS?
csrf
Один запрос — обычная отправка формы на action=»/submit», где отрабатывает Route::post('/submit', FormController@submit). Нет родителя у FormController, он просто находится в папке Controllers вместе с HomeController. Все максимально просто без заморочек.
С этим все в порядке, @csrf установлен . Просто не понятно почему снова вызывается HomeController и уже после него необходимый FormController.
Я скорее пытаюсь понять ценность решения, в котором рандомное число записывается в сессию и потом отправляется через форму. Возможно здесь проблема не в решении, а в самой идеи и можно решить задачу более элегантно.
что происходит после того как форма засабмитилась?у вас же обычная отправка формы, без ajax? Если так, то все верно, вы отправляете форму и после отправки страница перезагружается, соответсвенно вы попадаете опятьв / и отрабатывает ваш HomeController
сделайте отправку формы без перезагрузки страницы
Да, без ajax. Т.е. после отправки формы, я снова возвращаюсь на "/", а потом уже на "/submit", который является action у формы?
после отправки формы у вас снова грузится / страница на кторой эта форма находится, соответсвенно вы снова попадаете с HomeController и снова генерите число
что делает ваш action по сабмиту?
Данное рандомное число через форму не отправляется, оно должно храниться в сессии до отправки формы и не меняться после отправки формы, ибо будет происходит проверка кастомной каптчи с помощью этого заранее сгенерированного числа.
ну т.е. по сути csrf?
Не особо, с этим числом я буду сравнивать насколько правильно пользователь прошел каптчу и какой из вариантов выбрал.
Каптча для проверки формы это всего лишь одно из решений и не самое удачное в 2023 году. Можно использовать спам базы айпишников для оценки степени рисков, медовые ловушки и все это не будет бесить клиентов необходимостью считать, выстраивать или сравнивать.
Проверяет кастомную каптчу и если все ок, то делает запись в базу данных и платит пользователю немного крипты.
а, если за бабки, то пусть страдает )
Это я понимаю, но заказчик так захотел)
все делов крипте )
Чисто субъективно, это не совсем работа заказчика обеспечивать техническую безопасность системы ) Даже если он в школе кодил на Pascal )
как я вам и написал, после всех манипуляций в экшене, ваша страница перезагружается и снова грузится / роут
А почему нельзя проверить что в сессии этот ключ уже записан? Почему надо перезаписывать его каждый раз?
Этот дядя захотел вставить в проект несколько готовых каптч и попросил написать кастомную метаматическую каптчу на основе изображений. Он сам разработчик и вот так захотел.
Дело в том, что этот ключ не сохраняется в изначальном виде, а перезаписывается после перезагрузки страницы. Но как я уже понял, то нужно сделать сабмит без перезагрузки и все будет ок)
Понял, спасибо! Просто в данном случае хотел избежать использования js, но вижу что без него никак)
или в экшене редирект на страницу с результатом - success/fail
современное веб приложение без js не напишешь мне кажется, что у вас в целом проблема в логике приложения, на каком этапе генерить число, в каком контроллере выводить форму и результаты будет ли правильно работать ваше приложение если я просто перезагружу страницу в браузере? число ведь снова новое сгенерится
Просто форма отправляется на другой маршрут, не на тот же самый. Вот в этом-то и проблема)
Обсуждают сегодня