如何在不安装插件的情况下实现Google reCaptcha?

时间:2016-07-29 作者:James Hamann

Wordpress noob想知道如何在没有插件的情况下在我的登录中包含reCaptcha身份验证?

到目前为止,我已经使用钩子将captcha div添加到登录中:

add_action(\'login_form\',\'my_added_login_field\');
  function my_added_login_field(){
?>
    <p>
        <div class="g-recaptcha" data-sitekey="mySiteKey"></div>
    </p>
<?php
}
脚本已排队。现在,我只需要添加一个身份验证过程,在用户登录之前验证验证码。我知道我需要使用这样的过滤器:

add_filter( \'authenticate\', \'my_custom_authenticate\', 10, 3 );
function my_custom_authenticate( $user, $username, $password ){

$my_value = $_POST[\'g-captcha-response\'];

if (!)

return $user;
}
但我有点卡住了。根据谷歌的说法,一旦验证码被解析,就会填充一个名为“g-captcha-response”的字段,并在JSON对象中生成响应:

{
  "success": true|false,   
  "challenge_ts": timestamp,  // timestamp of the challenge load (ISO format yyyy-MM-dd\'T\'HH:mm:ssZZ)
  "hostname": string,         // the hostname of the site where the reCAPTCHA was solved
  "error-codes": [...]        // optional
}
我只是个傻瓜,所以我不知道该怎么处理这些信息。感谢您的帮助!

1 个回复
SO网友:Ramit Piet

你可以使用这个功能,我认为它工作正常。

  add_filter( \'wp_authenticate_user\', \'verify_recaptcha_on_login\', 10, 3 );
function verify_recaptcha_on_login($user, $password) {
    $secretkey = "your secret key";
    if (isset($_POST[\'g-recaptcha-response\'])) {
    $response = wp_remote_get( \'https://www.google.com/recaptcha/api/siteverify?secret=\'.$secretkey.\'&response=\' . $_POST[\'g-recaptcha-response\'] );

    $response = json_decode($response[\'body\'], true);


    if (true == $response[\'success\']) {


    return $user;


    } else {


    // FIXME: This one fires if your password is incorrect... Check if password was incorrect before returning this error...


     return new WP_Error( \'Captcha Invalid\', __(\'<strong>ERROR</strong>: You are a bot\') );


    }


    } else {


    return new WP_Error( \'Captcha Invalid\', __(\'<strong>ERROR</strong>: You are a bot. If not then enable JavaScript.\') );


    }
}

相关推荐

Error code when migrate

我在迁移到不同的服务器后得到了此错误代码。警告:require\\u once(/home/customer/www/noname.com/public\\u html/wp includes/widgets/class wp widget pages.php):无法打开流:在/home/customer/www/noname中没有这样的文件或目录。com/public\\u html/wp包含/默认小部件。phpon 11号线致命错误:require\\u once():打开required“/home