我正在测试我的用户登录/注册系统。我终于完成了表格,我已经测试了一段时间了。它在我完成表单之前工作,它在另一个页面上工作得很好但是,它不能在我的页面上进行注册。它不断发送成功为假。我的另一页是联系表格,与我的注册页面没有什么不同。它里面有所有相同的文件。
当我显然不是机器人时,我的错误代码一直向我显示我是一个机器人,而我只是在测试我自己的代码。
我之前想过,代码存储在目录中的位置存在问题,所以我试过了。
然后,我想如果我更改了密钥,那么也许我会设法让系统再次运行。那没用。
最后,我尝试重新安排我的HTML代码以使其工作,但也没有用。
现在,疯狂的部分,我仍然得到0.9分(在recaptcha网站上检查),这足以让我作为一个人传递但是,它仍然在JSON中给我这个错误。
之前它工作正常但是,一旦我开始测试我的注册表单的输入验证,它就开始称我的响应为假。
这是我不断得到的错误。我不太确定格式化JSON。这是通过php函数var_dump
返回的。技术上只是一条线。
object(stdClass)#13 (2)
{
["success"]=> bool(false)
["error-codes"]=> array(1)
{
[0]=> string(22) "missing-input-response"
}
}
这是我在一个名为recaptcha.php的文件中的脚本
<script src='https://www.google.com/recaptcha/api.js?render=<?php echo SITE_KEY; ?>'></script>
<script>
grecaptcha.ready(function() {
grecaptcha.execute('<?php echo SITE_KEY; ?>', {action: 'homepage'}).then(function(token) {
document.getElementById('g-recaptcha-response').value=token;
});
});
</script>
编辑/
添加了一些额外的代码一个PHP功能。常量SECRET_KEY被定义为另一个文件中的全局变量。
function getCaptcha($secretKey) {
$response =
file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret=" . SECRET_KEY . "&response={$secretKey}");
$reCaptcha = json_decode($response);
return $reCaptcha;
}
这包含在我验证recaptcha的地方。
$reCaptcha = getCaptcha($_REQUEST['g-recaptcha-response']);
var_dump($reCaptcha);
如果这有帮助。
我期待它变成["success"]=> bool(true)
但是,我甚至没有丝毫的线索有什么不对。我已经准备好让Google通过电话来解决这个问题。有人可以帮忙吗?
此错误意味着您没有将站点'secret'参数传递给POST请求:https://www.google.com/recaptcha/api/siteverify
检查'秘密'参数(在管理区域的设置屏幕中称为SECRET KEY)是否正确并且正在POST请求中发送。
好的,所以在看了几件事之后,我发现为什么它一直作为“缺失输入”错误返回。
我有一个页面有两种形式,只有一个recaptcha。
<form>
<input type="hidden" id="g-recaptcha-response" name="g-recaptcha-response" />
</form>
<form>
<input type="hidden" id="g-recaptcha-response" name="g-recaptcha-response" />
</form>
因为它们中有两个,所以API不知道要区分哪个,而不是为两者分配相同的值,它们都没有赋值。所以,为了解决这个问题,我改变了我的javascript:
<script src='https://www.google.com/recaptcha/api.js?render=<?php echo SITE_KEY; ?>'></script>
<script>
grecaptcha.ready(function() {
grecaptcha.execute('<?php echo SITE_KEY; ?>', {action: 'homepage'}).then(function(token) {
document.getElementById('g-recaptcha-response').value=token;
document.getElementById('g-recaptcha-response2').value=token;
});
});
</script>
我的输入表单看起来像这样:
<form>
<input type="hidden" id="g-recaptcha-response" name="g-recaptcha-response" />
</form>
<form>
<input type="hidden" id="g-recaptcha-response2" name="g-recaptcha-response2" />
</form>
相同的值但是,放入两个单独的字段。即使你只在一个页面上使用第二个字段,也可以将它留在那里,因为它不会影响只有一个recaptcha的页面。只要第一个字段用于存储令牌并在您的html中引用。我也在php中改变了这一点。
$reCaptcha = getCaptcha($_REQUEST['g-recaptcha-response2']);
var_dump($reCaptcha);
我想对于构建具有多个表单的页面的任何人,如果要使用recaptcha,则需要区分两个不同的输入字段以接收令牌。花了将近一天的时间,我不敢相信我花了很长时间才弄清楚这么简单的事情。这将解决丢失输入错误以及无效输入错误。