Показ капчи по запросу фронтенда
-
Установите VK Капча SDK.
-
Добавьте во фронтенд импорт класса
CaptchaWidgetи объектаCaptchaPublicEvents:npm, yarn, pnpmJS-скриптimport { CaptchaPublicEvents, CaptchaWidget } from "@vkid/captcha"; -
Создайте экземпляр виджета капчи:
const captchaWidget = new CaptchaWidget(); -
Подпишитесь на события с помощью метода SDK captchaWidget.on().
Невидимая капчаВстроенная капчаВсплывающее окноЕсли сервис оценит пользователя как подозрительного, невидимая капча будет автоматически заменена на видимую. При этом VK Капча SDK отправит событие
captcha: challenge visible, а после прохождения капчи —captcha: challenge hidden.Пример:
captchaWidget.on(CaptchaPublicEvents.SUCCESS, onSuccess);captchaWidget.on(CaptchaPublicEvents.CHALLENGE_VISIBLE, onChallengeVisible);captchaWidget.on(CaptchaPublicEvents.CHALLENGE_HIDDEN, onChallengeHidden);captchaWidget.on(CaptchaPublicEvents.TOKEN_EXPIRED, onTokenExpired); -
Получите от бэкенда ссылку для запуска виджета капчи.
-
Монтируйте капчу на страницу. Воспользуйтесь методом SDK captchaWidget.render().
Невидимая капчаВстроенная капчаВсплывающее окноВ параметре
invisibleукажите значениеtrue.Пример:
await captchaWidget.render({link,lang: 'ru',invisible: true,notice: { position: 'bottom-left', draggable: true },});Для невидимой капчи VK Капча SDK отобразит пользователю автоматическое уведомление об обработке данных.
-
На целевом действии вызовите метод SDK captchaWidget.execute().
Метод вернет promise-объект с результатом прохождения капчи: токен успешного прохождения капчи, если пользователь прошел капчу, или ошибку.
-
Обработайте результат прохождения капчи:
- Если promise-объект содержит токен успешного прохождения капчи, отправьте его бэкенду для валидации.
- Определите, что будет происходить во фронтенде в случае, когда promise-объект вернул ошибку. Коды ошибок описаны в статье Справочник SDK для веб-приложений.
-
(Опционально) Для одностраничного приложения (SPA, Single Page Application), где экраны сменяются без перезагрузки страницы, используйте метод SDK captchaWidget.destroy(), чтобы убрать предыдущую капчу со страницы.
Примеры кода на TypeScript:
import { CaptchaPublicEvents, CaptchaWidget } from '@vkid/captcha';const captchaWidget = new CaptchaWidget();// Подписки ставим до монтажа, чтобы не потерять ранние событияcaptchaWidget.on(CaptchaPublicEvents.SUCCESS, onSuccess);captchaWidget.on(CaptchaPublicEvents.CHALLENGE_VISIBLE, onChallengeVisible);captchaWidget.on(CaptchaPublicEvents.CHALLENGE_HIDDEN, onChallengeHidden);captchaWidget.on(CaptchaPublicEvents.TOKEN_EXPIRED, onTokenExpired);// Монтаж капчи на страницуconst { link } = await api.post('/api/captcha/session');await captchaWidget.render({link,lang: 'ru',invisible: true,notice: { position: 'bottom-left', draggable: true },});// Целевое действиеasync function onSubmit({ login, password }: Credentials) {const captchaToken = await captchaWidget.execute();await api.post('/api/login', { login, password, captchaToken });}