Новости Joomla

0 Пользователей и 1 Гость просматривают эту тему.
  • 8 Ответов
  • 1174 Просмотров
*

Region93

  • Захожу иногда
  • 62
  • 0 / 1
  • Вперед и только вперед !!!
Настройка ReCAPTCHA
« : 23.04.2017, 09:19:02 »
Добрый день нужна помощь с настройкой reCaptcha v2:

У меня есть форма но в моем коде когда человек не ставит галочку на иконке "I'm not a robot" recaptha code отправляет человека на пустую страницу с словами "Капча введена неверно" и сразу отправляет на пустую форму.
Мне же нужно чтоб человек оставался на этой же странице с предупреждением о не заполнении CAPTCHA и набранным сообщением в форме.
Вот пример с самого сайта Google
https://www.google.com/recaptcha/api2/demo

Вот мой php обработчик:

Спойлер
[свернуть]
      
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Re: Настройка ReCAPTCHA
« Ответ #1 : 23.04.2017, 09:41:11 »
1. Возьмите за правило использовать фигурные скобки для if, for, foreach, while... Без них страдает читабельность и исполняется по условиям только одна следующая строка кода.
2. У Joomla есть встроенная reCaptcha, зачем снова изобретать велосипед, тем более опыта нет?
3. Привести надо свою ссылку, а не демо от Google.
Не будь паразитом, сделай что-нибудь самостоятельно!
*

Region93

  • Захожу иногда
  • 62
  • 0 / 1
  • Вперед и только вперед !!!
Re: Настройка ReCAPTCHA
« Ответ #2 : 23.04.2017, 09:50:58 »
Потому, что форма в которую я пытаюсь внедрить капчу = самописный компонент. И что плохого когда человек учиться)
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Re: Настройка ReCAPTCHA
« Ответ #3 : 23.04.2017, 09:57:41 »
Кто сказал, что учиться плохо? Но учиться тоже надо уметь.
Возьмите код плагина reCaptcha и изучите, это не должно составить для вас труда, если вы уже написали свой компонент.
Еще раз обратите внимание на то, что эти строки
Код: php-brief
   $key = 'СЕКРЕТНЫЙ КЛЮЧ';
   $query = $url.'?secret='.$key.'&response='.$_POST['g-recaptcha-response'].'&remoteip='.$_SERVER['REMOTE_ADDR'];
   $data = json_decode(file_get_contents($query));


echo "
<html>
  <head>
   <meta http-equiv='Refresh' content='0; URL=".$_SERVER['HTTP_REFERER']."'>
  </head>
</html>";
         exit('Капча введена неверно');
у вас исполняются всегда.
Не будь паразитом, сделай что-нибудь самостоятельно!
*

ProtectYourSite

  • Живу я здесь
  • 2356
  • 135 / 4
  • Безопасность вебсайтов
Re: Настройка ReCAPTCHA
« Ответ #4 : 23.04.2017, 10:05:35 »
1) Для того, чтобы страница не обновлялась, а выдавала ошибку, необходимо использовать AJAX. Если Joomla, то можно использовать com_ajax для модулей или писать свой скрипт для компонентов
2) Можно посмотреть обязаловку Invisible Recaptcha - там необходимо использовать callback, можете поизучать API и внедрить проверку на стороне клиента еще до проверки на backend
*

Region93

  • Захожу иногда
  • 62
  • 0 / 1
  • Вперед и только вперед !!!
Re: Настройка ReCAPTCHA
« Ответ #5 : 23.04.2017, 10:35:45 »
Сам не писал, по этому и тяжело.

Цитировать
у вас исполняются всегда.

В чем ошибка?
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Re: Настройка ReCAPTCHA
« Ответ #6 : 24.04.2017, 16:49:35 »
В чем ошибка?
Это зависит от вашей задумки. Например, при любой раскладке
отправляет человека на пустую страницу с словами "Капча введена неверно" и сразу отправляет на пустую форму. 
- это можно считать ошибкой?
Не будь паразитом, сделай что-нибудь самостоятельно!
*

b2z

  • Глобальный модератор
  • 7290
  • 778 / 0
  • Разраблю понемногу
Re: Настройка ReCAPTCHA
« Ответ #7 : 24.04.2017, 17:24:04 »
Вывод встроенной CAPTCHA Joomla довольно прост:

Код: php
JPluginHelper::importPlugin('captcha', 'recaptcha');

$dispatcher = JEventDispatcher::getInstance();
$dispatcher->trigger('onInit', 'dynamic_recaptcha_1');
?>
<div>
<?php $output = $dispatcher->trigger('onDisplay', array('recaptcha', 'dynamic_recaptcha_1', 'class="my-recaptcha"'));
echo $output[0]; ?>
</div>

Далее проверяем качу (например, в контроллере):

Код: php
JPluginHelper::importPlugin('captcha', 'recaptcha');

$dispatcher = JEventDispatcher::getInstance();
$result = $dispatcher->trigger('onCheckAnswer');

if (!$result[0])
{
$this->setRedirect(
JRoute::_($someUrl, false)
);
$this->setMessage(
JText::_($this->text_prefix . '_ERROR_CAPTCHA_NOT_VALID'), 'error'
);

return false;
}
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться