Yandex Cloud
Поиск
Связаться с намиПодключиться
  • Документация
  • Блог
  • Все сервисы
  • Статус работы сервисов
    • Популярные
    • Инфраструктура и сеть
    • Платформа данных
    • Контейнеры
    • Инструменты разработчика
    • Бессерверные вычисления
    • Безопасность
    • Мониторинг и управление ресурсами
    • Машинное обучение
    • Бизнес-инструменты
  • Все решения
    • По отраслям
    • По типу задач
    • Экономика платформы
    • Безопасность
    • Техническая поддержка
    • Каталог партнёров
    • Обучение и сертификация
    • Облако для стартапов
    • Облако для крупного бизнеса
    • Центр технологий для общества
    • Облако для интеграторов
    • Поддержка IT-бизнеса
    • Облако для фрилансеров
    • Обучение и сертификация
    • Блог
    • Документация
    • Контент-программа
    • Мероприятия и вебинары
    • Контакты, чаты и сообщества
    • Идеи
    • Истории успеха
    • Тарифы Yandex Cloud
    • Промоакции и free tier
    • Правила тарификации
  • Документация
  • Блог
Проект Яндекса
© 2025 ООО «Яндекс.Облако»
Yandex SmartCaptcha
  • Начало работы
    • Доступность капчи
    • Валидация пользователя
    • Валидация домена
    • Типы заданий
    • Варианты заданий
    • Методы подключения виджета
    • Ключи капчи
    • Невидимая капча
    • Капча в React
    • Объект Javascript Interface
    • Ограниченный режим
    • Публичные IP-адреса
    • Квоты и лимиты
  • Управление доступом
  • Правила тарификации
  • Справочник Terraform
  • Метрики Monitoring
  • Аудитные логи Audit Trails
  • История изменений

В этой статье:

  • Установка пакета
  • Состав пакета
  • Компонент SmartCaptcha
  • Компонент InvisibleSmartCaptcha
  • Подписки на события
  • Сброс состояния SmartCaptcha
  1. Концепции
  2. Капча в React

Подключение капчи в React

Статья создана
Yandex Cloud
Улучшена
mgoriachev
Обновлена 7 ноября 2024 г.
  • Установка пакета
  • Состав пакета
    • Компонент SmartCaptcha
    • Компонент InvisibleSmartCaptcha
    • Подписки на события
  • Сброс состояния SmartCaptcha

Для подключения SmartCaptcha в React можно использовать npm-пакет @yandex/smart-captcha.

Установка пакетаУстановка пакета

Выполните внутри вашего проекта:

npm
yarn
pnpm
npm i -PE @yandex/smart-captcha
yarn add @yandex/smart-captcha
pnpm add @yandex/smart-captcha

Состав пакетаСостав пакета

Пакет предоставляет два компонента для работы со SmartCaptcha:

Компонент Описание
SmartCaptcha Компонент для валидации пользователя на сайтах с кнопкой Я не робот (обычная капча).
InvisibleSmartCaptcha Компонент для валидации пользователя на сайтах без кнопки Я не робот (невидимая капча).

Компонент SmartCaptchaКомпонент SmartCaptcha

Список доступных свойств:

Свойство

Тип

Описание

sitekey

string

Ключ клиента.

visible

boolean | undefined

Показывать задание пользователю.

language

ru | en | be | kk | tt | uk | uz | tr | undefined

Язык виджета.

test

boolean | undefined

Запуск капчи в тестовом режиме. Пользователь всегда будет получать задание. Используйте это свойство только для отладки и тестирования.

webview

boolean | undefined

Запуск капчи в WebView. Используется для повышения точности оценки пользователей при добавлении капчи в мобильные приложения с помощью WebView.

shieldPosition

top-left | center-left | bottom-left | top-right | center-right | bottom-right | undefined

Расположение блока с уведомлением об обработке данных.

hideShield

boolean | undefined

Скрыть блок с уведомлением об обработке данных.

onChallengeVisible

() => void | undefined

Метод вызывается, когда появляется всплывающее окно с заданием.

onChallengeHidden

() => void | undefined

Метод вызывается, когда закрывается всплывающее окно с заданием.

onNetworkError

() => void | undefined

Метод вызывается, когда происходит ошибка сети.

onJavascriptError

(error: { filename: string, message: string,
col: number, line: number }) => void | undefined

Метод вызывается, когда происходит критическая ошибка в работе JavaScript.

onSuccess

(token: string) => void | undefined

Метод вызывается, когда пользователь успешно прошел проверку. В качестве аргумента обработчик получает уникальный токен пользователя.

onTokenExpired

() => void | undefined

Метод вызывается, когда токен, полученный пользователем после прохождения проверки, становится невалидным.

Пример использования SmartCaptcha:

import { SmartCaptcha } from '@yandex/smart-captcha';

export const ComponentWithCaptcha = () => {
  const [token, setToken] = useState('');

  return <SmartCaptcha sitekey="<ключ_клиента>" onSuccess={setToken} />;
};

Компонент InvisibleSmartCaptchaКомпонент InvisibleSmartCaptcha

Список доступных свойств:

Свойство

Тип

Описание

sitekey

string

Ключ клиента.

visible

boolean | undefined

Показывать задание пользователю.

language

ru | en | be | kk | tt | uk | uz | tr | undefined

Язык виджета.

test

boolean | undefined

Запуск капчи в тестовом режиме. Пользователь всегда будет получать задание. Используйте это свойство только для отладки и тестирования.

webview

boolean | undefined

Запуск капчи в WebView. Используется для повышения точности оценки пользователей при добавлении капчи в мобильные приложения с помощью WebView.

shieldPosition

top-left | center-left | bottom-left | top-right | center-right | bottom-right | undefined

Расположение блока с уведомлением об обработке данных.

hideShield

boolean | undefined

Скрыть блок с уведомлением об обработке данных.

onChallengeVisible

() => void | undefined

Метод вызывается, когда появляется всплывающее окно с заданием.

onChallengeHidden

() => void | undefined

Метод вызывается, когда закрывается всплывающее окно с заданием.

onNetworkError

() => void | undefined

Метод вызывается, когда происходит ошибка сети.

onJavascriptError

(error: { filename: string, message: string,
col: number, line: number }) => void | undefined

Метод вызывается, когда происходит критическая ошибка в работе JavaScript.

onSuccess

(token: string) => void | undefined

Метод вызывается, когда пользователь успешно прошел проверку. В качестве аргумента обработчик получает уникальный токен пользователя.

onTokenExpired

() => void | undefined

Метод вызывается, когда токен, полученный пользователем после прохождения проверки, становится невалидным.

Важно

Вы обязаны уведомлять пользователей о том, что их данные обрабатывает SmartCaptcha. Если вы скрываете блок с уведомлением, сообщите пользователям иным способом о том, что SmartCaptcha обрабатывает их данные.

Пример использования InvisibleSmartCaptcha:

import { InvisibleSmartCaptcha } from '@yandex/smart-captcha';

export const InvisibleCaptcha = () => {
  const [token, setToken] = useState('');
  const [visible, setVisible] = useState(false);

  const handleChallengeHidden = useCallback(() => setVisible(false), []);

  const handleButtonClick = () => setVisible(true);

  return (
    <>
      <button onClick={handleButtonClick}>Validate</button>
      <InvisibleSmartCaptcha
        sitekey="<ключ_клиента>"
        onSuccess={setToken}
        onChallengeHidden={handleChallengeHidden}
        visible={visible}
      />
    </>
  );
};

Подписки на событияПодписки на события

Оба компонента предоставляют методы для подписки на события в виджете:

  • onChallengeVisible
  • onChallengeHidden
  • onNetworkError
  • onJavascriptError
  • onSuccess
  • onTokenExpired

Эти методы можно использовать, например, чтобы вызвать функцию, когда пользователю показалось задание.

Пример подписки на события:

import { SmartCaptcha, SmartCaptchaProps } from '@yandex/smart-captcha';

export const SubscriptionToCaptcha = () => {
  const [token, setToken] = useState('');
  const [status, setStatus] = useState('hidden');

  const handleChallengeVisible = useCallback(() => setStatus('visible'), []);
  const handleChallengeHidden = useCallback(() => setStatus('hidden'), []);

  const handleSuccess = useCallback((token: string) => {
    setStatus('success');
    setToken(token);
  }, []);
  const handleTokenExpired = useCallback(() => {
    setStatus('token-expired');
    setToken('');
  }, []);

  const handleNetworkError: SmartCaptchaProps['onNetworkError'] = useCallback(() => setStatus('network-error'), []);

  const handleJavaScriptError: SmartCaptchaProps['onJavascriptError'] = useCallback((error) => {
    setStatus('javascript-error');
    logError(error);
  }, []);

  return (
    <>
      Status: {status}
      <SmartCaptcha
        sitekey="<ключ_клиента>"
        onChallengeVisible={handleChallengeVisible}
        onChallengeHidden={handleChallengeHidden}
        onNetworkError={handleNetworkError}
        onJavascriptError={handleJavaScriptError}
        onSuccess={handleSuccess}
        onTokenExpired={handleTokenExpired}
      />
    </>
  );
};

Важно

Ошибка javascript-error указывает на критический сбой в работе JavaScript. Сообщите об этой проблеме пользователю в интерфейсе приложения. При возникновении такой ошибки засчитывать успешное выполнение задания нельзя — это может создать потенциальную уязвимость вашего приложения.

Сброс состояния SmartCaptchaСброс состояния SmartCaptcha

Капча сохраняет свое состояние после прохождения валидации. Чтобы пользователь мог пройти проверку еще раз, настройте сброс состояния. Если этого не сделать, повторный запрос к серверу будет отправлен с тем же одноразовым токеном, что и в первый раз.

Пример настройки сброса состояния:

import { SmartCaptcha } from "@yandex/smart-captcha";
import { useState } from "react";

export default function App() {

  const [resetCaptcha, setResetCaptcha] = useState(0);

  /* Update the state */
  const handleReset = () => setResetCaptcha((prev) => prev + 1);

  return (
    <div className="App">
      <SmartCaptcha
        key={resetCaptcha}
        sitekey="<ключ_клиента>"
      \>
    <div\>
  );
}

Была ли статья полезна?

Предыдущая
Невидимая капча
Следующая
Объект Javascript Interface
Проект Яндекса
© 2025 ООО «Яндекс.Облако»