AjaxForm и reCaptcha V3

Доброе время суток. Сталкивался ли кто-нибудь с использованием reCaptcha V3 через плагин?

Каким образом происходит проверка на робота? Обычных пользователей не пропускает, а проверку не дает.

Сама каптча на сайте подключена, но нет возможности ее проверить. Смотрел в документации, написано «Параметр rcv3Action предназначен для изменения идентификатора action.», но так и не понял для чего он и что выполняет. Если зайти через приватное окно, то никаких проверок не происходит и форма надежно отправляет, а другие пользователи отправляют форму и у них не выскакивает никакой проверки а сразу выдается сообщение «Вы не прошли проверку reCaptcha.» Смотрел видео на ютубе, парень делал не через плагин и говорит что существуют 3 спосоа проверки и по умолчанию стоит на кнопке, при нажатии на нее если есть подозрения то всплывающим окном выходит проверка на картинках — но ничего. PS на странице несколько форм.
Евгений Лазарев
30 января 2020, 15:10
modx.pro
1
3 601
0

Комментарии: 17

Сергей Самусев
30 января 2020, 19:26
0
Делал по инструкции, не на одном сайте. Проблем не было. Как проверить не знаю, но спама нет. Она как то в фоне проверяет…
    Андрей
    30 января 2020, 19:46
    0
    Смотрел в документации, написано «Параметр rcv3Action предназначен для изменения идентификатора action.», но так и не понял для чего он и что выполняет.
    Если форм на странице несколько (а их несколько как написано), то в этом параметре должны быть разные значения для каждой из форм, например:
    'rcv3Action' => 'contactform' - в первой
    'rcv3Action' => 'feedbackform' - во второй, и т.д.
    Если настроено всё по инструкции, как написали выше, то проблем быть не должно. И покажите вызовы сниппетов и чанки форм на всякий случай.
      Евгений Лазарев
      30 января 2020, 19:51
      0
      {if $type?}
          {switch $type}
          	{case 'blue'}
          	    {var $conf = [
          	        'subject' => 'Заявка '~$_modx->config.site_name,
          	        'tpl' => 'tplBlueForm',
          	        'action' => 'blue_feedback'
          	    ]}
          	{case 'green'}
          	    {var $conf = [
          	        'subject' => 'Вопрос '~$_modx->config.site_name,
          	        'tpl' => 'tplGreenForm',
          	        'action' => 'green_feedback'
          	    ]}
          	{case 'popup'}
          	    {var $conf = [
          	        'subject' => 'Связаться с нами '~$_modx->config.site_name,
          	        'tpl' => 'tplPopupForm',
          	        'validate' => 'name:required,phone:required,email:email,form:required,g-recaptcha-response:required',
          	        'action' => 'fb-popup'
          	    ]}
          {/switch}
          {if !$conf.validate?}
              {var $conf.validate = 'name:required,phone:required,comment:required,email:email,form:required,g-recaptcha-response:required'}
          {/if}
          {$_modx->runSnippet('!AjaxForm', [
          	'snippet' => 'FormIt',
          	'validationErrorMessage' => 'В форме содержатся ошибки!',
          	'successMessage' => 'Спасибо за обращение, наш менеджер свяжется с Вами в ближайшее время',
          	'hooks' => 'rcv3,email',
          	'emailSubject' => $conf.subject,
          	'emailFromName' => $_modx->config.site_name,
          	'emailFrom' => $_modx->config.org_noreply,
          	'emailTo' => $_modx->config.org_email,
          	'emailTpl' => 'tplFormitEmail',
          	'form' => $conf.tpl,
          	'validate' => $conf.validate,
          	'rcv3Action' => $conf.action,
          	'titleForm' => $title
          ])}
      {/if}
        Андрей
        30 января 2020, 23:29
        0
        Вроде как всё должно работать. Единственное что можно попробовать убрать из validate:
        g-recaptcha-response:required
        Здесь это не нужно
        Евгений Лазарев
        30 января 2020, 19:52
        0
        {var $title = $titleForm ? $titleForm : 'Оформите заявку на Бесплатные тестовые образцы продукции'}
        <form class="reionbm">
            <div>
                <h3 class="iijgpnomn489b">{$title}</h3>
                <div class="yeuongmnm">
                    <div>
                        <div>
                            <input type="text" name="name" placeholder="Имя*" required>
                        </div>
                        <div class="otstp"></div>
                        <div>
                            <input type="text" name="phone" placeholder="Телефон*" required>
                        </div>
                        <div class="otstp"></div>
                        <div>
                            <input type="text" name="email" placeholder="E-mail*">
                        </div>
                        <input type="hidden" name="form" value="{$title}" />
                    </div>
                    <div>
                        <textarea name="comment" required placeholder="Напишите, какие образцы и в каком количестве Вы хотели бы получить, а так же Ваши контактные данные для организации доставки образцов."></textarea>
                    </div>
                </div>
                <div class="regu3hb">
                    <button type="submit" class="ryuihgmv" onclick="checkForm(this);">Отправить заявку</button>
                </div>
                <div class="kgire9j0m">
                    <div class="squaredThree">
                        <input type="checkbox" class="gnrji08bxz" id="squaredThree5hfh5" name="check" onclick="checkCheck($(this));">
                        <label for="squaredThree5hfh5"></label>
                    </div>
                    <a href="/politika-konfidenczialnosti.html" target="_blank">Политика конфиденциальности</a>
                </div>
                {'!rcv3_html' | snippet : [
                    'action' => $rcv3Action,
                    'error' => $_modx->getPlaceholder('fi.error.g-recaptcha-response'),
                ]}
                <div class="message"></div>
            </div>
        </form>
        Это первая tpl
          Евгений Лазарев
          30 января 2020, 23:39
          0
          Просто не совсем понятно, может что-то я не понимаю. Ты обычный пользователь заходишь и хочешь отправить форму, твой score не набрал например нужный 0.7 — и все, ты бот. И это никак не оспорить. Хоть всплывающий тест бы был.
          Александр Мельник
          30 января 2020, 22:44
          0
          Не очень в тему, но добавлю от себя про reCaptcha 3, недавно просто обнаружил.
          Заметил, что формы, защищенные рекапчей 3, а именно если внутри идет вызов сниппета
          {'!rcv3_html' | snippet : [
                      'action' => $rcv3Action,
                      'error' => $_modx->getPlaceholder('fi.error.g-recaptcha-response'),
                  ]}
          которые обязательно нужно вызывать по инструкции, приводит просто к катастрофической просадке, если проверять сайт в google page speed.
          На сайте 5 форм с защитой — для мобильного показывает 30 баллов.
          Оставляю только одну с защитой, с остальных просто убираю вызов сниппета в форме — 60 баллов.
          Отключаю совсем защиты во всех формах — 98 баллов.
            Scorp Satex
            31 января 2020, 15:20
            0
            Поддерживаю. Может автор плагина @Игорь Терентьев пояснит зачем так?

            5 форм — 5 раз вызывается скрипты каптчи. Может это можно как-то исправить?

            Мне тоже потом прилетает от SEOшников. :)
              Игорь Терентьев
              02 февраля 2020, 15:44
              0
              Всем привет, пока что нет времени заняться компонентом.
              Примерно представляю, как решить проблему с тормозами при использовании нескольких форм на странице — выставлять плэйсхолдер в сниппете и проверять на пустоту.
                Aleksandr Huz
                03 февраля 2020, 17:15
                0
                А можно просто принять мой PR
            Aleksandr Huz
            03 февраля 2020, 17:29
            0
            Попробуйте заменить содержимое сниппета rcv3_html на это и сравните разницу.
          Павел
          18 апреля 2023, 08:20
          0
          Привет

          Помогите пожалуйста разработаться, из инструкции или комментариев выше не пойму как сделать. На странице так же присутствуют несколько форм. Вызываются по кнопке, открываются в POPUP окне.

          Код самой формы:
          <div id="form-feedback" class="feedback" style="display: none;">
          	[[!AjaxForm? 
          		&snippet=`FormIt` 
          		&emailTpl=`tplMail`
          		&hooks=`rcv3,email`
          		&validate=`name:required, city:required, phones:required`
          		&frontend_css=``
          		&frontend_js=``
          		&emailSubject=`Обратная связь с сайта [[++site_name]]`
          		&emailFromName=`[[++site_name]]`
          		&emailTo=`{1 | resource: 'tplMail'}`
          		&emailFrom=`[[++emailsender]]`
          		&successMessage=`Ваше сообщение успешно отправлено`
          		&form=`@CODE:
          			<form action="[[~[[*id]]]]" method="post" class="ajax_form" onsubmit="ym(64435486, 'reachGoal', 'sent_order'); return true;">
          				<div id="form-fields">
          					<img src="/assets/template/img/star.png" alt="Звезда">
          					<h4 class="title">Поможем получить военный билет <span>законно</span></h4>
          					<p>Оставьте заявку, наш юрист свяжется с вами и расскажет подробно о выбранной услуге</p>
          					<input type="hidden" id="fr_link" name="link" value="[[+fi.link]][[*id:is=`1`:then=`[[!+cf.current_city.url]]`:else=`[[!+cf.current_city.url]][[~[[*id]]]]`]]"/>
          					<input type="hidden" id="fr_city" name="hcity" value="[[!+cf.city]]"/>
          					
          					<small class="error_name">[[+fi.error.name]]</small>
          					<input type="text" id="fr_name" name="name" value="[[+fi.name]]" placeholder="Ваше имя"/>
          					<small class="error_name">[[+fi.error.city]]</small>
          					<input type="text" id="fr_city" name="city" value="[[+fi.city]]" placeholder="Ваш город"/>
          					<small class="error_name">[[+fi.error.phones]]</small>
          					<input type="text" id="fr_phones" name="phones" class="m-phones" value="[[+fi.phones]]" placeholder="Номер телефона"/>
          					
          					<div class="approval"><input type="checkbox" checked> Я согласен с условиями обработки <a href="[[~7]]" target="_blank" title="Политика обработки персональных данных">персональных данных</a></div>
          					
          					<button type="submit" class="button">Оставить заявку</button>
          				</div>
          				<div id="form-thanks" style="display: none;">
          					<h4 class="title">Спасибо за ваше обращение!</h4>
          					<p>Мы свяжемся с Вами в ближайшее время.</p>
          				</div>
          				[[+fi.success:is=`1`:then=`
          				<div class="alert alert-success">[[+fi.successMessage]]</div>
          				`]]
          				[[+fi.validation_error:is=`1`:then=`
          				<div class="alert alert-danger">[[+fi.validation_error_message]]</div>
          				`]]
          				[[!rcv3_html? &action=`[[+rcv3Action:default=``]]` &error=`[[+fi.error.g-recaptcha-response]]`]]
          			</form>
          		` 
          	]]
          </div>
          Не пойму, к примеру в вызов самой формы дописал

          rcv3Action=`contactform` - у первой
          rcv3Action=`contactformtwo` - у второй
          Как правильно прописать в самой форме или что дополнительно нужно сделать, т.к. сейчас не работает (((
            Константин Ильин
            18 апреля 2023, 09:46
            0
            1. Код формы перенести в чанк
            2. rcv3Action прописывается у вызова AjaxForm
            [[!AjaxForm?
                ...
                &rcv3Action=`contactform` 
                ...
            ]]
            3. проверить работает ли, можно инспектором кода в браузере(F12 в хроме), выдало ли Вам что-то вызов rcv3_html
              Павел
              18 апреля 2023, 10:34
              0
              Объясните мне пожалуйста.

              1. Ок перенесу в «чанк», в самой форме не чего не нужно указывать? вызов остается тот же?
              [[!rcv3_html? &action=`[[+rcv3Action:default=``]]` &error=`[[+fi.error.g-recaptcha-response]]`]]
              2. Это я понял сделаю. Вопрос самое название &rcv3Action=`contactform` — contactform прописываю произвольно, главное что бы отличалось? или contactform это чанк или сниппет какой?

              3. Ок, буду проверять
          Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
          17