Я использую Recapcha V3 для вставки скрытого ввода в форму с токеном. Когда форма отправлена, я проверяю токен в бэкэнде и действую соответствующим образом.
<script src='https://www.google.com/recaptcha/api.js?render={{config("recaptcha.key")}}'></script>
<script>
grecaptcha.ready(function () {
grecaptcha.execute('{{config("recaptcha.key")}}', {action: '{{$action}}'}).then(function (token) {
$('<input />').attr('type', 'hidden')
.attr('name', 'recaptcha')
.attr('value', token)
.appendTo('form');
});
});
</script>
Проблема в том, что когда пользователь отправляет форму слишком быстро, а ввод еще не введен appendTo('form')
, серверная часть не получает токен и возвращает пользователя обратно на страницу формы с ошибкой проверки (я препятствую отправке данных если токена нет).
Я не могу понять, как запретить отправку формы, пока токен не загрузится.
Так что-то вроде:
Если пользователь нажимает кнопку "Отправить", и токен еще не загружен, выполните анимацию загрузки и дождитесь, пока токен не будет отправлен, если маркер присутствует, когда пользователь нажимает кнопку "Отправить", разрешите отправку формы.