Реализация captcha API REST клиентского сервера

Я создаю приложение REST для клиентского сервера. Клиентская сторона основана на Angular, а сервер-на PHP (не то, чтобы это имело большое значение).

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

Я не ограничен какими-либо конкретными библиотеками, только требование заключается в том, что не может быть никаких вызовов сторонних серверов на стороне клиента (библиотеки js, размещенные на 3rd party серверы или ключ api req и т. д.).

спасибо

3 ответов


когда google captcha утверждает одного пользователя, он предоставляет вам токен.

Итак, представьте себе этот контекст. Пользователи собираются сохранить и использует captcha, captcha делает свой бизнес, пока не одобрит пользователя и не даст вам токен, это все, что имеет значение.

Если вы хотите увидеть "предварительный" поток обращений к этому.

  1. пользователь перед регистрацией прошел captcha, captcha дает вам токен в передней части.
  2. пользователь нажимает сохранить, вы получаете в серверная часть данных формы и маркер captcha. Вы спрашиваете google через api, является ли токен реальным? если они сказали "Да", вы сохраняете форму, если каким-то образом Google не распознает ее, вы возвращаете ошибку.
  3. передний конец прослушивает успех или ошибку и какую ошибку. Если ошибка captcha, принудительно повторите попытку, получите новый токен.
  4. бэкэнд снова получает данные формы и новый токен и проверяет снова.

вы можете посмотреть на google-recaptcha. Его угловая реализация здесь

vcRecaptcha


новый Google-иш reCaptcha довольно скользкий. У них есть несколько простых для понимания примеров и сценариев использования.

https://www.google.com/recaptcha/intro/index.html

Edit: чтобы решить ваш конкретный вопрос о том, как реализовать это в приложении RESTful, я бы сделал два файла. Одним из них будет открытый файл, такой как index.php, а другой-это внутренний файл, который будет содержать личную информацию.

Я мог бы скопировать / вставить мой ранее написанный how-to здесь, или я мог бы просто связать вас с статья, которую я написал 2 месяца назад.