Search

Romua1d.ru
Скрипты

jQuery.validate ajax проверка recaptcha

Для приготовления рецепта нам нужны:

  • jquery
  • jquery.validate
  • ключи recaptha 1,0
  • ровные руки

Я покажу, как интегрировать reCaptcha 1.0 со знаменитым плагином jQuery Validate. Я уверен, что у вас уже есть учетная запись reCaptcha, из нее Вам понадобится секретный и публичные ключи для сайта, чтобы смело работать с обменом данных.

Для чего нам нужно это? Для того чтобы в реальном времени проверять событие прохождения капчи или подобного рода ajax запросы с ответом. Проблема не частая, но я уверен, что кто-то сталкивался с ней.

к содержанию ↑

1. Подключаем reCaptcha AJAX js:

<script type="text/javascript" src="http://www.google.com/recaptcha/api/js/recaptcha_ajax.js"></script>

2. Разместите этот див, чтобы вывести форму рекапчи

<div id="captcha"></div>

Javascript (или Coffeescript)

// Отображает форму recaptcha в элементе с идентификатором "captcha"
Recaptcha.create("your_public_key", "captcha", {
  theme: "clean",
  callback: Recaptcha.focus_response_field
});

// Добавляем новый метод валидации
jQuery.validator.addMethod("checkCaptcha", (function() {
  var isCaptchaValid;
  isCaptchaValid = false;
  $.ajax({
    url: "libs/checkCaptcha.php",
    type: "POST",
    async: false,
    data: {
      recaptcha_challenge_field: Recaptcha.get_challenge(),
      recaptcha_response_field: Recaptcha.get_response()
    },
    success: function(resp) {
      if (resp === "true") {
        isCaptchaValid = true;
      } else {
        Recaptcha.reload();
      }
    }
  });
  return isCaptchaValid;
}), "");

// Валидация
$("form").validate({
  rules: {
    // your rules here...

    // Add a rule for the reCaptcha field
    recaptcha_response_field: {
      required: true,
      checkCaptcha: true
    }
  },
  messages: {
    recaptcha_response_field: {
      checkCaptcha: "Your Captcha response was incorrect. Please try again."
    }
  },
  onkeyup: false,
  onfocusout: false,
  onclick: false
});
 #
  # * Recaptcha
  # 

  # Отображаем форму
  Recaptcha.create "your_public_key", "captcha",
    theme: "clean"
    callback: Recaptcha.focus_response_field

  # Добавляем новый метод валидации
  jQuery.validator.addMethod "checkCaptcha", (->
    isCaptchaValid = false
    $.ajax(
      url: "libs/checkCaptcha.php"
      type: "POST"
      async: false
      data:
        recaptcha_challenge_field: Recaptcha.get_challenge()
        recaptcha_response_field: Recaptcha.get_response()

      success: (resp) ->
        if resp is "true"
          isCaptchaValid = true
        else
          Recaptcha.reload()
    )
    return isCaptchaValid
  ), ""

  # Валидация
  $("form").validate
    rules:
      // your rules here...

      // Add a rule for the reCaptcha field
      recaptcha_response_field:
        required: true
        checkCaptcha: true

    messages:
      recaptcha_response_field:
        checkCaptcha: "Ва."

    onkeyup: false
    onfocusout: false
    onclick: false
к содержанию ↑

PHP

  1. Скачайте recaptcha php библиотеку и распакуйте в какую-нибудь папку, например libs или используя композер, скачайте в vendor и подключите автолоад:
  2. Cоздайте файл вызова, например checkCaptcha.php, этот скрипт будет валидировать капчу:
<?php
// Подключение библиотеки
require_once __DIR__ . "/libs/recaptcha-php/recaptchalib.php";

$privatekey = "your_private_key";

// Смотрим пост запросы
$resp = recaptcha_check_answer ($privatekey,
                                $_SERVER["REMOTE_ADDR"],
                                $_POST["recaptcha_challenge_field"],
                                $_POST["recaptcha_response_field"]);

// Если все ок, то вернем тру
if ($resp->is_valid) {
  echo "true";
} else {
  echo "false";
}
к содержанию ↑

Дополнительно: CSS / LESS

Вы можете столкнуться с некоторыми проблемами, которые вы решите с помощью этого CSS:

/*
 * reCaptcha перезапись классов
 */// Убираем нижний бордер имейджа
.recaptchatable #recaptcha_image{
  overflow:hidden;
}

// Удаляем ненужную пустоту под фреймом
body > iframe[src='#'] {display:none ;}
header iframe,
section iframe,
footer iframe,
div iframe { display:inline; }
Плагин рейтинга создан автором этого блога. Буду очень признателен, если вы сможете его поддержать (ссылка)

p.s. Если статья была полезной и вас переполняет чувство благодарности, можете поддержать меня долларом на патреоне

Romuald Shmidtelson

Web Developer. I have expirience in FrontEnd, Backend, Devops. PHP, Python, Javascript (Vue.js, React.js)

Недавние Посты

Как получить первый заказ на фрилансе

Получение первого заказа на фрилансе может быть вызовом, особенно для новичков, которые еще не имеют…

1 год назад

Топ 7 css фреймворков 2021 года

Разработка сайтов и веб-приложений стала в наше время неизбежной потребностью. Тем не менее, существует несколько способов…

2 года назад

Что такое семантическое ядро и как его использовать для продвижения сайта?

Компании и специалисты по маркетингу тратят много времени и денег на изучение языка поисковых систем,…

2 года назад

Что такое адаптивные изображения? Как правильно использовать srcset.

Адаптивные изображения - это набор методов, используемых для загрузки правильного изображения в зависимости от разрешения…

3 года назад

Что такое Политика конфиденциальности для сайта и для чего она нужна?

Политика конфиденциальности - это документ, в котором подробно описывается, как компания или организация обрабатывает любую…

3 года назад

Кто такой вебмастер?

В современном мире много специалистов занятых поддержанием работы сайтов, и довольно часто многих из них…

3 года назад