【问题标题】:google recaptcha returns false due to "invalid-input-secret"由于“invalid-input-secret”,google recaptcha 返回 false
【发布时间】:2016-08-24 16:55:45
【问题描述】:

我已经从 google 安装了最新的 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" } } 

【问题讨论】:

  • 有谁遇到过这种情况?

标签: php captcha phalcon


【解决方案1】:

我真傻,我仔细检查了密钥,一开始只是缺少一个字符。这样就解决了。

【讨论】:

  • 这似乎是谷歌的recaptcha页面的一些问题,因为同样的事情发生在我身上两次......第一个字符没有复制
  • 在这里完全同意@sohaiby。就我而言,最后一个字符不是通过双击来复制的。
  • 是的...双击密钥不会完全选择它
【解决方案2】:

整个问题的出现是由于对 Google 的困惑窥视。他们创建了多个渠道来实施 reCAPTCHA 注册。如果您遇到此错误,我相信您已经按照第一种方法为您的 reCAPTCHA 应用程序生成 SECRET KEY。

  1. 您访问该网站:https://console.cloud.google.com/security/recaptcha 并为您的网站生成 reCAPTCHA 密钥。请注意,这是一个 Google Cloud Console 链接,您必须只收到一个用于前端和后端的密钥。

  2. 您访问该网站:https://www.google.com/recaptcha/admin/create 并为您的应用程序生成 reCAPTCHA 密钥。请注意,这不是一个 Google Cloud Console 网站,而是一个单独的网站,它将为您提供 2 个不同的密钥,一个供您的后端使用,另一个供您的前端使用。使用这些键,你应该很高兴。

这对 Google 来说很糟糕,因为他们有多个来源用于同一目标设施,其中一种方式已被弃用或无法正常工作。

【讨论】:

  • 国王?,你拯救了我的一天! :)
  • 太棒了。因为这个,我把头发拔了出来,多亏了你,我找到了解决办法。因此,我使用第二个站点“google.com/recaptcha/admin/create”创建了密钥,现在它可以完美运行。
  • 所以我们不能使用我们在 Google Cloud 中创建的密钥?
  • @DeanChristianArmada 就我而言,我无法从 Google Cloud 获取密钥来开始工作!
  • 绝对传奇!
【解决方案3】:

对于 javascript

在我的例子中,我使用了环境变量 我用双引号"6Lfg1_0UAAAAABWdUn5gNhXEuLxhpkQyheDpLbnB" 定义了变量。因此,当通过 url 传递的密钥将包含在双引号中。这是我的问题。网址中不应包含双引号。

当你用单引号定义环境变量时,如下所示:

RECAPTCHA_SECRET_KEY='6Lfg1_0UAAAAABWdUn5gNhXEuLxhpkQyheDpLbnB'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-25
    • 1970-01-01
    • 2017-10-22
    • 2014-12-07
    • 1970-01-01
    • 2016-05-29
    相关资源
    最近更新 更多