Яндекс Капча в формах
Введение
Яндекс капча позволяет добавить защиту от ботов на формы и имеет большие бесплатные лимиты.
Здесь мы пошагово разберем как создать простую форму с внедренной Яндекс капчей.
Демостенд работы Яндекс Капча на форме Falcon Space
Как внедрить проверку капчи в стандартных формах Falcon Space
Шаг 1: Создайте капчу в Яндекс Cloud
Это делается один раз в консоли управления Яндекс Cloud https://console.yandex.cloud/
Войдите в консоль: Перейдите в консоль управления Яндекс Cloud и авторизуйтесь.
Проверьте биллинг: Убедитесь, что у вас есть платежный аккаунт со статусом ACTIVE или TRIAL_ACTIVE. Для работы капчи он обязателен, даже если вы не выходите за рамки бесплатного тарифа.
Создайте ресурс: В консоли выберите нужный каталог (папку), найдите сервис SmartCaptcha и нажмите кнопку «Создать капчу».
Заполните настройки:
Имя: Введите любое название капчи (от 2 до 63 символов).
Сложность: Оставьте Средняя (рекомендуется).
Список сайтов: Важно! Укажите домены, на которых будет работать капча (например, example.com).
Сохраните: Нажмите кнопку «Создать».
Шаг 2: Получите ключи доступа
Сразу после создания вам понадобятся два ключа:
На странице созданной капчи перейдите на вкладку «Обзор».
Скопируйте значения Client key (ключ клиента) и Server key (секретный ключ сервера) - сохраните его в /settings c кодом yandexCaptchaSecret.
Client key публичный, его можно встраивать в HTML-код страницы. Server key секретный, он нужен только для проверки на вашем сервере, никогда не выводите его в коде страницы.
Шаг 3: Создаем форму и настраиваем ее
Создаем форму с неким кодом (в примере - watch_yacaptcha).
Добавляем ей необходимые поля и hidden поле с кодом smart-token.
В сниппете формы указываем параметр data-yandexCaptchaKey="... Client key (ключ клиента) ...."
Это добавит над кнопкой сохранения поле капчи + добавит динамически скрипт Яндекс Капчи на страницу.
В поле формы SaveItem API указываем метод checkYandexCaptcha - это исходящий метод АПИ, который будет запрашивать проверку токена у Яндекса и возвращать в форму отклик, который мы далее обрабатываем в SaveItem:
CREATE PROCEDURE [dbo].[fm_watch_yacaptcha_saveItem]
@username nvarchar(256),
@itemID int,
@parameters ExtendedDictionaryParameter readonly
AS
BEGIN
declare @checkYandexCaptcha nvarchar(max) = isnull((select value2 from @parameters where [Key] = 'checkYandexCaptcha'), '')
if(isjson(@checkYandexCaptcha)=0) begin
select 0 Result, 'Ошибка капчи '+ @checkYandexCaptcha Msg
return
end
if(JSON_VALUE(@checkYandexCaptcha, '$.status')<>'ok')begin
select 0 Result, 'Ошибка проверки капчи ' + isnull(JSON_VALUE(@checkYandexCaptcha, '$.message'), '') Msg
execute as_print @checkYandexCaptcha
return
end
-- другие поля формы
declare @pt1 nvarchar(max)
select @pt1 = Value2 from @parameters where [key]='t1'
declare @pt2 nvarchar(max)
select @pt2 = Value2 from @parameters where [key]='t2'
-- SELECT 1
select 1 Result, 'OK' Msg, '' SuccessUrl, 1 HideFormAfterSubmit, '' RefreshContainer, 1 EnableSaveAlert
END
Шаг 4: Создание API метода для проверки токена:
В /asapi создаем исходящий метод POST c кодом checkYandexCaptcha.
Процедура response:
CREATE PROCEDURE [dbo].[api_checkYandexCaptcha_request]
@parameters ExtendedDictionaryParameter READONLY,
@username nvarchar(128)
AS
BEGIN
declare @userIP nvarchar(max) = isnull((select value2 from @parameters where [Key] = 'userIP'), '')
declare @smartToken nvarchar(max) = isnull((select value2 from @parameters where [Key] = 'smart-token'), '')
declare @secret nvarchar(max) = dbo.as_setting('yandexCaptchaSecret', '')
declare @url nvarchar(max) = 'https://smartcaptcha.cloud.yandex.ru/validate?secret='+@secret+'&ip='+@userIP+'&token='+ @smartToken
-- SELECT 1
select '' Msg, 1 Result, @url Url , 'application/x-www-form-urlencoded' ContentType
END
Примечания:
- Если капча базово будет не пройдена на клиенте, то токен будет пустой и запрос на сервер не отправится.
- Проверку токена на сервере надо делать обязательно (как указано выше в статье).
- Для модальных форм также можно указывать data параметр для настройки капчи.
- В SaveItem вы можете также настроить отправку себе уведомлений при проблемах с капчей (например, DOS атака или выход за лимиты).
Страница-источник на сайте falconspace.ru
-
Начало работы
-
Основа Falcon Space
-
Руководства
-
Возможности
-
Коммуникация пользователей
-
Таблицы
-
Формы
Работа с формами Настройка полей формы Список типов полей формы GetItem - вывод данных формы CheckItem - процедура проверка введенных данных на форме SaveItem - процедура сохранения формы SaveField - сохранение одиночного поля на форме CheckItemFIeld - процедура реагирования на изменения поля dict - процедура для значений списковых полей формы Progress - процедура отображения статуса заполнения формы Как вывести форму во всплывающем окне рядом с кнопкой (popover) Загрузка формы по ссылке Как принимать в форму не 1 параметр (itemID), а несколько входящих параметров? data-param-p1 Как сделать модальную форму Как добавить коллбек после загрузки формы и после сохранения формы. Как показывать на форме прогресс заполнения (прогресс заполнения формы) Как сделать форму в виде мастера шагов Как сделать подтверждение действия в СМС (SMS) в форме Как установить поля в форме по умолчанию при загрузке Как показывать изменяющуюся информацию при изменении полей Формы. Как сделать в форме более 1 кнопки действий (несколько кнопок действий на форме) Как правильно обрабатывать цены (дробные числа) на форме Как передать в форму скрытый параметр Как в форме добавить примеры заполнения полей (example) Как сделать окно подтверждения действия формы Как выбрать значение списка через справочник в модальном окне Динамическое изменение itemID у формы в зависимости от других элементов страницы Как скрывать/показывать, обновлять область на странице при изменении поля формы Как добавить новый элемент, если в списке на форме его нет Как перезагрузить страницу после сохранения формы Как вывести списковые данные или таблицу внутри формы Как сделать зависимые поля в форме (Страна, Город) Как сделать кастомную HTML разметку для формы (jsRender) Как создать кастом форму с подтверждением действия по Email или SMS (JS метод) Установка фоновой панели для формы Как сделать задержку при сохранении формы (saveDelay) Подсказки-ограничители длины для полей в форме Как динамически изменять тип поля формы Как сохранить значение поля в браузере, чтобы каждый раз его не вбивать при загрузке (оставлять последнее сохраненное). Запоминание поля формы в браузере Как выводить разные данные на одной форме для разных ролей Как сделать форму с сохранением состояния Как сделать поля с анимацией значений Использование Google Recaptcha в формах Как обновить таблицу после сохранения формы в модальном окне Как указать произвольную маску для поля ввода в форме Кастом проверка полей формы через JS Как в выборе даты (datepicker) задать доступные даты Как создать форму для редактирования сущности Загрузка формы в выпадающем окне (dropdown) Добавление смайликов (emoji) в поля форм Как у формы сделать progress bar при загрузке формы Работа с датами (date календарь) Показ количества символов рядом с полем в форме Кнопка очистки формы Reset Контроль заполнения ключевых форм на сайте Как сделать форму с простым подтверждением действия (confirm) Как поменять соотношение длины метки и поля Как при сохранении формы вывести сообщение printlog, а не alert Выпадающая панель в форме рядом с названием dropdownPanel Как сделать форму с динамическим количеством полей Визуальный признак изменения полей у формы Яндекс Капча в формах
-
Поля формы
-
Лендинги
-
Дизайн, стилизация, юзабилити
-
Интеграции
-
Универсальный API
-
Каталоги
-
Навигация
-
Документы
-
Работа с искусственным интеллектом
-
Дополнительные компоненты
-
Продвижение, SEO
-
Системные моменты
-
Системное администрирование
-
HOWTO
-
Загрузка файлов, картинок
-
HOWTO SQL
-
HOWTO JS
-
HOWTO Верстка
-
Решение проблем
-
Советы по реализации