Новая Google reCAPTCHA(v2) для Office

По примеру Новая Google reCAPTCHA(v2) для FormIt сделал reCAPTCHA для office.

Ставим пакет: http://modx.com/extras/package/recaptchav2 Генерируем и забиваем ключи как в ссылке выше.
В чанк tpl.Office.auth.login в форму id=«office-auth-register» добавляем
<div class="col-sm-offset-3 col-sm-8">
[[!recaptchav2_render]]
</div>
Создаем плагин recaptchav2_office на событие OnBeforeUserFormSave. (По примеру сниппета recaptchav2)
<?php
if ($modx->context->key != 'mgr') {
    switch ($modx->event->name) {
        case 'OnBeforeUserFormSave':
            //$modx->log(1,print_r($_POST,1));
            if(!isset($_POST['g-recaptcha-response'])){
                $modx->event->output('Enter recapcha!');
            }
            // Register API keys at https://www.google.com/recaptcha/admin
            $site_key = $modx->getOption('recaptchav2.site_key', null, '');
            $secret = $modx->getOption('recaptchav2.secret_key', null, '');
            // reCAPTCHA supported 40+ languages listed here: https://developers.google.com/recaptcha/docs/language
            $lang = $modx->getOption('cultureKey', null, 'en');
            // make sure the modLexicon class is loaded by instantiating 
            $modx->getService('lexicon','modLexicon');
            // load lexicon
            $modx->lexicon->load('recaptchav2:default');
            // get the message from default.inc.php from the correct lang
            $tech_err_msg = $modx->lexicon('recaptchav2.technical_error_message');
            $recaptcha_err_msg = $modx->lexicon('recaptchav2.recaptcha_error_message');
            
            // Get the class
            $recaptchav2Path = $modx->getOption('recaptchav2.core_path', null, $modx->getOption('core_path') . 'components/recaptchav2/');
            $recaptchav2Path .= 'model/recaptchav2/';
            if (!file_exists($recaptchav2Path . 'autoload.php')) {
                $modx->log(modX::LOG_LEVEL_WARN, 'Cannot find required RecaptchaV2 autoload.php file.'); 
                return false;
            }
            require_once($recaptchav2Path . 'autoload.php');
            $recaptchav2 = new \ReCaptcha\ReCaptcha($secret, new \ReCaptcha\RequestMethod\CurlPost());
            if (!($recaptchav2 instanceof \ReCaptcha\ReCaptcha)) {
                //$hook->addError('recaptchav2_error', $tech_err_msg);
                
                $modx->log(modX::LOG_LEVEL_WARN, 'Failed to load recaptchav2 class.'); 
                $modx->event->output($tech_err_msg);
            }
            
            // The response from reCAPTCHA
            $resp = null;
            // The error code from reCAPTCHA, if any
            $error = null;
            
            // Was there a reCAPTCHA response?
            if ($_POST['g-recaptcha-response']) {
                $resp = $recaptchav2->verify($_POST['g-recaptcha-response'], $_SERVER["REMOTE_ADDR"]);
            }
            
            // Hook pass/fail
            if ($resp != null && $resp->isSuccess()) {
                
            } else {
                //$hook->addError('recaptchav2_error', $recaptcha_err_msg);
                //DEBUG INFO: $modx->log(modX::LOG_LEVEL_ERROR, print_r($resp, true));
                $modx->event->output($recaptcha_err_msg);
            }
            break;
    }
}
И все рекапча для office работает.
Извиняюсь писал и делал на скорую руку. Надеюсь будет полезно.
Александр Туниеков
11 января 2018, 17:08
modx.pro
16
3 301
+13
Поблагодарить автора Отправить деньги

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

ЗАО Александрия
25 января 2018, 11:04
0
Добрый день. Сделал все, как у Вас написано, но регистрация срабатывает не зависимо нажата капча или нет
    Александр Туниеков
    25 января 2018, 13:15
    +1
    Наверно что то не сделали. думаю плагин на событие не привязали.
    Александр Туниеков
    26 января 2018, 04:12
    +1
      Александр Туниеков
      26 января 2018, 04:13
      0
      здесь галочку поставили?
        phantom666_06
        26 января 2018, 08:42
        0
        Поставил. Теперь пишет, что нажмите чекбокс, хотя, он нажат
          Александр Туниеков
          28 января 2018, 16:33
          0
          У меня все работает :). В плагине раскоментируйте строчку //$modx->log(1,print_r($_POST,1)); и посмотрите в журнале ошибок что в форма регистрации у вас отправляет. Должно быть так.
          [2018-01-26 00:41:24] (ERROR @ /public_html/core/cache/includes/elements/modplugin/23.include.cache.php : 5) Array
          (
              [email] => dshfmnhjgmuhgn@gmail.com
              [phone_code] => 
              [password] => ****
              [g-recaptcha-response] => 03AA7ASh3jmOfveg0-FkbQWDXQMbi5Z2XcCp5AB6bIez-Ab1cO-4ybE2y_YtM7j_Z58UKRDto8RDV7GQpesDOH5HujWMIzjqWnTDq2Gji0VAuA8PXGsU6Q2U2ktv8IgRL0NT2myXvpEq7BBUjgOwPr0_IRNGy1HOgQRiqdgjk6o1EUayBABFpwrsI25rUA3UR_ljAR1nJ8YocZE1FJ1BWCUiorDBVLR1zT1j7xqcT6R-TdLQFcFD4vJPDoajLhSk8uQxPypJh-m4XxkE5VfjnvUD63NHURvRCdG_Jwrps_M9VoUrS_Rm68WKtLOx0ch5Hy_aiki9Odbsoq
              [action] => auth/formRegister
              [pageId] => 1
              [csrf] => 1efcf9f36d297fe01c5b3de55861c3ad
          )
            Александр Туниеков
            28 января 2018, 16:45
            +1
            Еще раскоментируйте строку //DEBUG INFO: $modx->log(modX::LOG_LEVEL_ERROR, print_r($resp, true)); и посмотрите что там пишет. Может ключи апи рекапчи не прописали.
        Sergey (Sentinel)
        07 июня 2019, 18:23
        0
        А как только для регистрации плагин сделать? А то и в профиле запрашивает капчу…
          Александр Туниеков
          07 июня 2019, 19:43
          0
          А вот это не предусмотрели :(.
          Попробуйте все что в case 'OnBeforeUserFormSave': обернуть в
          if($_POST['action']=='auth/formRegister'){
        Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
        12