我在我的web应用程序中设置了invisible reCAPTCHA,但无法验证用户的响应.(即使我正在传递正确的POST参数)
我通过在客户端调用grecaptcha.execute();
以编程方式调用挑战.然后使用recaptcha回调提交表单(registrationForm.submit();
):
<div class="g-recaptcha"
data-sitekey="SITE_KEY"
data-callback="onSubmit"
data-size="invisible">
</div>
现在,在阅读了"Verifying the user's response"篇文档之后,我发现响应令牌作为POST参数传递给g-recaptcha-response
:
对于web用户,可以通过以下三种方式之一获取用户的响应令牌:
- 当用户在您的网站上提交表单时,g-recaptcha-response POST参数
- ...
因此,我使用Fetch在服务器端创建一个POST请求,将所需的正文数据发送到verification endpoint:
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();
});
}
但我一直得到以下回应:
{
尽管我将响应和机密作为JSON数据传递到帖子正文中.
我做错什么了吗?当做