Я устанавливаю невидимое reCAPTCHA в моем веб-приложении и испытываю проблемы с проверкой ответа пользователя.(хотя я передаю правильные параметры POST)
Я программно вызываю вызов, вызывая grecaptcha.execute();
на стороне клиента.И после отправки формы (registrationForm.submit();
) с помощью обратного вызова recaptcha:
<div class="g-recaptcha"
data-sitekey="SITE_KEY"
data-callback="onSubmit"
data-size="invisible">
</div>
Теперь, прочитав «Проверка ответа пользователя» документацию, я понял, чтотокен ответа передается в качестве параметра POST g-recaptcha-response
:
Для пользователей сети вы можете получить токен ответа пользователя одним из трех способов:
- gПараметр POST -recaptcha-response, когда пользователь отправляет форму на ваш сайт
- ...
Поэтому я использую Fetch для созданияPOST-запрос на стороне сервера к конечной точке проверки с необходимыми данными тела:
verify(req, res, next) {
const VERIFY_URL = "https://www.google.com/recaptcha/api/siteverify";
return fetch(VERIFY_URL, {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
secret: process.env.RECAP_INVIS_SECRET_KEY,
response: req.body['g-recaptcha-response'],
}),
})
.then(response => response.json())
.then(data => {
res.locals.recaptcha = data;
return next();
});
}
Но я получаю следующий ответ:
{success: false, коды ошибок: ['missing-input-response', 'missing-input-secret']}
Несмотря на то, что я передаю ответ и секрет в виде данных JSON в теле POST.
Я что-то не так делаю?С уважением.