Как перевести quip на recaptchav2
Если вы использовали на своем сайте для комментариев модуль quip, то скорее всего вы используете recaptcha для защиты от спама. Примерно с пол года назад google начал присылать предупреждения о том что вышла новая версия recaptcha v2, а поддержка старой будет в скоре приостановлена.
Сайт довольно продолжительное время жил своей жизнью, но вот наконец-то появилось на него время. Было заменены старый дизайн из нулевых, на bootstrap. Выступил в роли на пощупать :). В моих руках красотой конечно не блещет, но функцию свою выполнил, адаптивный веб-дизайн. В консолях гугла и яндекса уже давно висели предупреждения о том что сайт не предназначен для мобильных устройств, с прямым намеком на то что он будет понижен в результатах выдачи. А показателями посещения увы похвастаться не могу.
Так вот... Поискал готовые дополнения для modx revo и нашел уже готовое решение recaptchav2. И всё бы хорошо, но в примерах и описаниях используется в связке в formIt и Login. Везде при этом использовались ловушки, они же hook'и. Курочить сильно старую капчу не хотелось, поэтому родная капча была сразу же отключена &recaptcha=`0`. В описании quip нашел информацию о том что он теперь умеет работать с hook'ами и добавил параметр &preHooks=`recaptchav2`.
Вызов сниппета QuipReply получился таким:
[ [!QuipReply? &preHooks=`recaptchav2` &thread=`blog-post-183` ¬ifyEmails=`your@site.com` &closeAfter=`0` &recaptcha=`0` &tplAddComment=`tplAddComment` &disableRecaptchaWhenLoggedIn=`0`]]
в шаблоне добавления комментария добавил вызов рендера recaptchav2:
[ [+quip.recaptcha_html]] [ [+error.recaptcha]] [ [!recaptchav2_render]] [ [!+fi.error.recaptchav2_error]]
в настройках системы заполнил параметры recaptchav2.secret_key и recaptchav2.site_key.
Капча новая появилась. Более того она даже успешно не давала добавить комментарий и делал это слишком хорошо. Комментарий нельзя было добавить даже если капча пройдена.
Тут настало времени безудержного веселья. Расставил логи в сниппете recaptchav2 и выяснилось что она не видит данных ответа, которе успешно появляются на форме в div блоке 'g-recaptcha-response'. Расставил логи в классе создания комментарие core/components/quip/processors/web/comment/create.php и засел над изучение этим этих самых логов. Картина представла следующая:
- в классе create.php 'g-recaptcha-response' есть и доступен через массив $fields
- в сниппете recaptchav2 данных нет, ни через $hook->getValue ни через $fields. Ничего. Ровно по нулям
Ха! подумалось глубокив вечером и добавил в в классе создания комментариев запись в хук: $hook->fields['g-recaptcha-response'] = $fields['g-recaptcha-response'];
Сохранил. Довольный запускаю и.... ничего не меняется от слова совсем. В сниппете капчи по прежнему данных ответа со страницы нет. WTF!?!?
Гугл про хуки мне ничего внятного так и не сказал. Отлаживаемся дальше и ищем способ как же передать в наш сниппет данные ответа
В итоге всё уперлось в запуск preHook. Пробую передать туда массив с полями:
-$quip->preHooks->loadMultiple($this->getProperty('preHooks',''),$this->getProperties(),array( +$quip->preHooks->loadMultiple($this->getProperty('preHooks',''),$fields,array(
и о чудо! Всё завелось!
Так-с как бы теперь поделится то своим знанием? Вбиваю в поиск проблемную строчку кода и получаем первую же ссылку на аналогичный pull-request.
Больше всего настораживает что дополнение последний раз обновлялось в 12м году. может кто знает жив ли еще проект и как связаться с автором, оставьте инфу в комментарии буду очень благодарен
UPD 24.03.20
расширение поддерживает recaptchav3. Требуется заполнить открытый и закрытый ключи, заменить &preHooks=`recaptchav3`, и в шаблоне комментария вызвать рендер для новой капчи
[ [!recaptchav3_render]]
Не знаю как, но боты довольно успешно обходят recaptchav2, статиска и логи показывает примерно 60% успешных проходов. Надеюсь теперь ваши комментарии в modx будут защищены от спам-ботов. :)
Комментарии (0)