Я попытался решить множественное нажатие на кнопку отправки с помощью ReCaptcha V3.Это работает, так как вставка базы данных запускается только один раз в контроллере, и в следующий раз она просто запускает проверку, возвращая ошибку.
Проблема заключается в том, что метод контроллера не выполняется полностью.
Например, если я нажимаю несколько раз на кнопку отправки на странице электронной коммерции, в CheckoutController
метод checkout
запускается не полностью.
class CheckOutController extends Controller {
public function checkout(Request $request) {
// Some checkout Logic (insert into database)
$this->validate($request, [
'recaptcha' => ['required', new \App\Rules\Recaptcha]
]);
if (Cart::content()->count() > 0) {
foreach (Cart::content() as $cartItem) {
$insert = new \App\Transaction;
$insert->product_id = $cartItem->id;
$insert->receipt_id = $cartItem->receipt_id;
$insert->quantity = $cartItem->qty;
$insert->price= $cartItem->price;
$insert->save();
}
Cart::destroy(); //last part of checkout logic
return view('finishCheckout');
}
return abort(404);
}
}
Поскольку я работаю локально, скорость выше, поэтому запрос перебирает мой код, вставляя данные в мою базу данных.
Иногда запрос попадает в часть Cart:: destroy();
логики, иногда - нет. Но я подозреваю, что в производственной среде код может остановиться в другом месте до этой части.
И это никогда не достигнет return view('finishCheckout');
.Он просто повторяет тот же метод и не проходит проверку, возвращая меня обратно на страницу оформления заказа с ошибкой проверки.
Могу ли я что-нибудь сделать, чтобы убедиться, что все методы запущены или остановленыот полного запуска?
Изменить: Обратите внимание, что это происходит только тогда, когда я нажимаю кнопки отправки несколько раз!Если бы я щелкнул по нему только один раз, метод работает правильно.