我已经从谷歌安装了最新的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'
)
)
);
$validation->add('password',
new Confirmation(array(
'message' => 'Password doesn\'t match confirmation',
'with' => 'cpassword'
)
)
);
$error = $validation->validate($post);
$errors = array();
if(count($error)){
foreach($error as $e){
$errors[] = $e;
}
}
$data = array(
'secret' => "my secret key",
'response' => $post['g-recaptcha-response'],
'remoteip' => $ip
);
$verify = curl_init();
curl_setopt($verify, CURLOPT_URL, "https://www.google.com/recaptcha/api/siteverify");
curl_setopt($verify, CURLOPT_POST, true);
curl_setopt($verify, CURLOPT_POSTFIELDS, http_build_query($data));
curl_setopt($verify, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($verify, CURLOPT_RETURNTRANSFER, true);
$res = curl_exec($verify);
$captcha = json_decode($res);
if($captcha->success == false){
$errors[] = "Invalid Captcha, You are a freakin robot!";
}
return $errors;
}
这可能是什么原因?这是转储响应时的输出:
object(stdClass)#70 (2) { ["success"]=> bool(false) ["error-codes"]=> array(1) { [0]=> string(20) "invalid-input-secret" } }
答案 0 :(得分:9)
愚蠢的我,我加倍检查了密钥,它刚开始时缺少一个字符。这解决了它。
答案 1 :(得分:7)
整个问题的出现都是因为对 Google 的窥视感到困惑。他们创建了多个渠道来实现 reCAPTCHA 注册。如果您遇到此错误,我相信您已经按照第一种方法为您的 reCAPTCHA 应用程序生成了 SECRET KEY。
您访问网站:https://console.cloud.google.com/security/recaptcha 并为您的网站生成 reCAPTCHA 密钥。请注意,这是一个 Google Cloud Console 链接,您必须只收到一个用于前端和后端的密钥。
您访问网站:https://www.google.com/recaptcha/admin/create 并为您的应用程序生成 reCAPTCHA 密钥。请注意,这不是 Google Cloud Console 网站,而是一个单独的网站,它将为您提供 2 个不同的密钥,一个用于您的后端,另一个用于您的前端。使用这些键,您应该可以开始使用了。
这对 Google 来说很糟糕,因为他们有针对同一目标设施的多个来源,而其中一种方式已被弃用或不起作用。
答案 2 :(得分:0)
对于javascript
在我的情况下,我使用了环境变量
我用双引号"6Lfg1_0UAAAAABWdUn5gNhXEuLxhpkQyheDpLbnB"
定义了变量。因此,当通过url传递的秘密密钥将包含在双引号中。这是我的问题。网址中不应包含双引号。
定义环境变量时,请用单引号定义,如下所示:
RECAPTCHA_SECRET_KEY='6Lfg1_0UAAAAABWdUn5gNhXEuLxhpkQyheDpLbnB'