Я использую reCAPTCHA v3 от Google в приложении Angular 2 для защиты от автоматической отправки форм. Мое приложение выполняет много сетевых вызовов в фоновом режиме, когда пользователи взаимодействуют с пользовательским интерфейсом.
С index.html
я намеренно блокирую вызов, чтобы загрузить библиотеку (не позволяя миру Angular войти до загрузки recaptcha/api.js
):
<script src="https://www.google.com/recaptcha/api.js?render=reCAPTCHA_site_key"></script>
Из конструктора Angular Service Я использую токен DOCUMENT DI для ссылки на объект grecaptcha
:
constructor(@Inject(DOCUMENT) private document: any) {
this.grecaptcha = this.document.grecaptcha;
}
Как только приложение загружено (с использованием ловушек жизненного цикла ), вышеупомянутая служба Angular вызывает grecaptcha.execute
для получения уникального token
(согласно руководству Frontend Integration ):
public executeCaptcha() {
this.grecaptcha.ready(() => {
this.grecaptcha
.execute(MyService.CAPTCHA_KEY, {
action: 'execute'
})
.then((token: string) => this.token = token);
});
}
token
является параметром обратного вызова и сохраняется как член службы Angular (this.token = token)
).
На данный момент приложение не выполняло никаких вызовов API для моего бэкэнда , а пользователь не был проверен как человек.
token
должен быть отправлен на мой внутренний сервер, который, в свою очередь, должен проверить ответ пользователя , сделав API-запрос .
Ответ API затем можно вернуть в браузер (приложение Angular):
{
"success": true|false,
"challenge_ts": timestamp, // timestamp of the challenge load (ISO format yyyy-MM-dd'T'HH:mm:ssZZ)
"hostname": string, // the hostname of the site where the reCAPTCHA was solved
"error-codes": [...] // optional
}
Вопросы
- Если
token
отправлять с каждым HTTP-запросом от моего Angular
приложение, и проверено каждый раз?
- ... или пользователь может быть проверен один раз (в начале) и его оценка запомнится в приложении Angular?
- Я прочитал где-то , что Google использует движения мыши и различные сигналы на стороне клиента для вычисления оценки.
- ... означает ли это, что я должен (пере) периодически проверять, чтобы получить улучшенный результат?