我在我的Web应用程序中设置了一个不可见的reCAPTCHA,无法验证用户的响应.(即使我传递了正确的POST参数)
我通过调用grecaptcha.execute();客户端以编程方式调用挑战.然后registrationForm.submit();使用recaptcha回调提交表单()()
<div class="g-recaptcha"
data-sitekey="SITE_KEY"
data-callback="onSubmit"
data-size="invisible">
</div>
Run Code Online (Sandbox Code Playgroud)
现在阅读"验证用户响应"文档后,我发现响应令牌作为POST参数传递给g-recaptcha-response:
对于Web用户,您可以通过以下三种方式之一获取用户的响应令牌:
- 用户在您的站点上提交表单时的g-recaptcha-response POST参数
- ...
所以我使用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();
});
}
Run Code Online (Sandbox Code Playgroud)
但我一直得到以下回应:
{success:false,error-codes:['missing-input-response','missing-input-secret']}
即使我将响应和秘密作为JSON数据传递给POST正文.
难道我做错了什么?问候.
我已经从谷歌安装了最新的recaptcha,但它总是在提交后返回false并且总是返回"invalid-input-secret"错误,即使从前端视图验证总是正确的.这可能是什么原因.顺便说一句,我正在使用phalcon框架测试localhost xampp中的所有内容.这是我检查验证码的部分:
protected function validate_data($post, $ip){
$validation = new Validation();
$validation->add(
'user_name',
new PresenceOf(
array(
'message' => 'The Username is required'
)
)
);
$validation->add(
'email',
new PresenceOf(
array(
'message' => 'The e-mail is required'
)
)
);
$validation->add(
'password',
new PresenceOf(
array(
'message' => 'The Password is required'
)
)
);
$validation->add(
'cpassword',
new PresenceOf(
array(
'message' => 'The Confirmation Password is required'
)
)
);
$validation->add(
'email',
new Email(
array(
'message' => 'The e-mail is not valid'
) …Run Code Online (Sandbox Code Playgroud)