Protected against bots by Yandex SmartCaptcha. Data processing policy
Captcha
This page has not been translated into English yet. The Russian original is below.
Проверка «я не бот» для формы сайта. Обёртка: рисует виджет сервиса над своим ребёнком и выпускает форму только с токеном на руках.
Тип:
wrapper
Только веб:
в приложении элемент рисует ребёнка,
verify
ничего не делает: установленное приложение — не анонимная форма.
State @message:"" @proof:""
HttpData url:"https://api.example.com/v1/complaints" method:"POST"
immediate:false watch:false refresh:@send
body:{jsonEncode(mapOf("message", message, "captchaToken", proof))}
Captcha token:@fresh failed:@down verify:@checkHuman
onVerified:(){proof = fresh; send()}
Column
ElevatedButton onPressed:(){checkHuman()}
Text "Отправить"
Text "Напишите нам на почту." if:$down
Параметры
| Параметр | Тип | Описание |
|---|---|---|
token
|
выход, string | Токен для запроса. Пуст, пока проверка не пройдена, и снова пуст, когда истёк |
failed
|
выход, bool |
true
, когда сервис недоступен или не объявлен в
project.json
|
verify
|
выход, функция |
Её зовёт кнопка формы. Запускает проверку; запрос уходит из
onVerified
|
onVerified
|
колбэк | Выполняется, когда токен есть: положить его туда, откуда его читает запрос, и отправить |
Сервис и ключ в разметке не пишутся — они объявлены в `settings.captcha` .
Как это работает
-
Кнопка зовёт проверку, а не отправку.
verifyзапускает проверку,onVerifiedсрабатывает только с токеном. Видимый виджет, который посетитель уже отметил, отправляет сразу; не отмеченный — как только отметит. -
Отправляет нажатие, а не галочка.
Токен, полученный до нажатия, просто ложится в
token. -
Токен одноразовый и живёт недолго.
Следующий
verifyпосле отправки сам сбрасывает виджет и ждёт нового токена; истёкший токен пустеет. - Токен проверяет сервер , которому форма шлёт данные, — своим серверным ключом. Куда положить токен (тело, заголовок, имя поля), решает разметка, потому что это требование бэкенда.
- Вид виджета подбирается сам. Ширина — не больше 400 px, тема — по фону, на котором он стоит: на тёмной странице виджет тёмный. В разметке для этого писать нечего.
Правила
-
MUST
Кнопка и всё, что читает выходы, — ВНУТРИ
Captcha: сосед элемента его выходов не видит, и обработчик кнопки молча не сработает. -
MUST
Запрос (
HttpData) — СНАРУЖИ, выше элемента: колбэк видит то, что объявлено выше. Тело запроса при этом не видит выходов внутри, поэтому токен переносится в переменную страницы (proof = fresh). - MUST Сервер обязан проверять токен. Токен, который никто не проверяет, ни от чего не защищает.
-
MUST NOT
Серверный ключ в
project.jsonне кладётся. -
SHOULD
Покажите запасной путь по
failed: без токена форма не уходит никогда, и человеку нужен другой способ связаться.
See also
- Session — вход посетителя; форма регистрации — первый кандидат на капчу
- Script — авторский JavaScript на странице
- project.json — объявление сервиса