Переход с Google reCAPTCHA v2 на dCAPTCHA не занимает много времени. Вам понадобится изменить только названия параметров и вызовов API (если они используются), сам механизм проверки запроса остается таким же.
Предварительные условия:
- Услуга dCAPTCHA подключена в личном кабинете DDoS-Guard
- Создан и включен ключ CAPTCHA
- Домен добавлен в список доменов ключа CAPTCHA
Изменения на сайте
Замена скрипта
На каждой странице, где планируется заменить reCAPTCHA на dCAPTCHA, найдите и измените тег скрипта.
До:
<script src="https://www.google.com/recaptcha/api.js" async defer></script>После:
<script src="https://captcha.ddos-guard.net/static/api.js" defer></script>Если вы использовали явный рендер (explicit rendering) через grecaptcha, измените эти вызовы на вызовы API ddgcaptcha. Подробнее о настройке explicit rendering
Замена виджета в форме
Обновите контейнер в каждой форме, в которой используется капча: замените название класса (g-recaptcha → ddg-captcha-container) и Site key.
До:
<form action="/login" method="POST">
<!-- прочие поля -->
<div class="g-recaptcha" data-sitekey="6LfD3PIbAAAAAJs_eEHvoOl75_83eXSqpPSRFJ_u"></div>
<button type="submit">Войти</button>
</form>После:
<form action="/login" method="POST">
<!-- прочие поля -->
<div class="ddg-captcha-container" data-sitekey="ваш_sitekey"></div>
<button type="submit">Войти</button>
</form>
Другие изменения в код:
- Удалите атрибуты reCAPTCHA:
data-theme,data-size,data-tabindex. Подробнее о кастомизации виджета dCAPTCHA - Замените все обращения к
g-recaptcha-responseнаddg-captcha-token - Удалите стили бейджа reCAPTCHA
.grecaptcha-badge - Замените все вызовы API
grecaptchaнаddgcaptcha. Соответствие вызовов API
Изменения на бэкенде
Отредактируйте вызов проверки reCAPTCHA, заменив
- эндпоинт для проверки токена —
https://www.google.com/recaptcha/api/siteverify→https://captcha.ddos-guard.net/siteverify - имя параметра секрета (
secret→private_key) и сам секретный ключ - формат данных в запросе на
json
До:
import requests
import os
SECRET_KEY = os.environ['RECAPTCHA_SECRET_KEY']
def verify_recaptcha(token):
response = requests.post(
'https://www.google.com/recaptcha/api/siteverify',
data={'secret': SECRET_KEY, 'response': token},
)
return response.json()После:
import requests
import os
PRIVATE_KEY = os.environ['DDG_CAPTCHA_PRIVATE_KEY']
def verify_ddg_captcha(token):
response = requests.post(
'https://captcha.ddos-guard.net/siteverify',
json={'private_key': PRIVATE_KEY, 'response': token},
)
return response.json()Если на сайте используется Content-Security-Policy, замените www.google.com/recaptcha/ и www.gstatic.com/recaptcha/ на captcha.ddos-guard.net в директивах script-src, frame-src и connect-src.
Подробнее о проверке dCAPTCHA на сервере
Соответствие параметров и вызовов API
| Компонент | reCAPTCHA v2 | dCAPTCHA |
|---|---|---|
| Скрипт | https://www.google.com/recaptcha/api.js | https://captcha.ddos-guard.net/static/api.js |
| Класс контейнера виджета | g-recaptcha | ddg-captcha-container |
| Поле с токеном | g-recaptcha-response | ddg-captcha-token |
| Эндпоинт для проверки токена | https://www.google.com/recaptcha/api/siteverify | https://captcha.ddos-guard.net/siteverify |
| Секрет | secret (form-urlencoded) | private_key (JSON) |
API
| Google reCAPTCHA v2 | dCAPTCHA |
|---|---|
grecaptcha.ready() | ddgcaptcha.ready() |
grecaptcha.render() | ddgcaptcha.render() |
grecaptcha.reset() | ddgcaptcha.reset() |
grecaptcha.getResponse() | ddgcaptcha.getResponse() |
grecaptcha.execute() | — используйте reset() для начала новой проверки |