Custom ReCaptcha Login

时间:2013-08-27 作者:Derp

我正在尝试将ReCaptcha添加到我的登录页面。我知道每个请求有很多插件,但我不能使用插件。到目前为止还不错,我可以将验证码添加到我的登录中,但无法显示错误。

当我输入错误的密码时,它会在我身上出错,但如果我输入了正确的密码而没有输入验证码,我就不会出错(我应该会得到一个验证码未填充的错误)。所以我唯一的时间captcha_errors 当用户名/密码错误时触发函数。

在检查登录凭据之前,如何让我的登录表单检查ReCaptcha?

do_action(\'login_head\');

// this function adds captcha to the login form
function addCaptcha() {
    if( session_id() == "" )
        @session_start();

    if (isset( $_SESSION["recaptcha_response_field"] )) 
        unset( $_SESSION["recaptcha_response_field"] );

    ?>
        <p class="cptch_block">
            <div id="cap"></div>
            <script type=\'text/javascript\' src=\'http://www.google.com/recaptcha/api/js/recaptcha_ajax.js\'></script>
            <script type=\'text/javascript\'>
                Recaptcha.create("pubk", "cap", {theme:"clean", callback: Recaptcha.focus_response_field});
            </script>
            <noscript>
                <iframe src=\'http://www.google.com/recaptcha/api/noscript?k=pubk\' height=\'300\' width=\'500\'></iframe>
                <br />
                <textarea name=\'recaptcha_challenge_field\' rows=\'3\' cols=\'40\'></textarea>
                <input type=\'hidden\' value=\'manual_challenge\' name=\'recaptcha_response_field\'/>
            </noscript>
        </p>
        <br />
    <?php 
    return true;
}

function verifyCaptcha($pageid) {
    $result = false;
    if( session_id() == "" )
        @session_start();

    $pvk = \'prvk\';

    if (!empty($pvk) && isset($_POST[\'recaptcha_response_field\'])) {
        if(!function_exists(\'recaptcha_check_answer\')) {
            require_once \'recaptchalib.php\';
        }
        $resp = recaptcha_check_answer($pvk, $_SERVER[\'REMOTE_ADDR\'], $_POST[\'recaptcha_challenge_field\'], $_POST[\'recaptcha_response_field\']);
        $result = $resp->is_valid;
    }
    if(!$result)
        return $_SERVER["REQUEST_URI"];
    else
        return admin_url();
}


// this function checks captcha posted with a login
function captcha_errors( $errors ) {
    if ( isset( $_SESSION[\'cptch_error\'] ) )
        unset( $_SESSION[\'cptch_error\'] );

    // return $errros.\'<strong>TEST</strong>\';

    if ("" ==  $_REQUEST[\'recaptcha_response_field\'] ) {    
        return $errors.\'<strong>\'. __( \'ERROR\', \'captcha\' ) .\'</strong>: \'. __( \'Please fill out The Cpatcha.\', \'captcha\' );
    }

    if ( isset( $_REQUEST[\'recaptcha_response_field\'] ) && verifyCaptcha()) {
        // captcha was matched                      
    } else {
        return $errors.\'<strong>\'. __( \'ERROR\', \'captcha\' ) .\'</strong>: \'. __( \'Please enter a valid CAPTCHA value.\', \'captcha\' );
    }
    return( $errors );
}




add_action( \'login_form\', \'addCaptcha\' );
add_filter( \'login_redirect\', \'verifyCaptcha\', 10, 3 );  
add_filter( \'login_errors\', captcha_errors);

1 个回复
SO网友:Moaz Ateeq

为此目的使用此插件SI Captcha

结束

相关推荐

已安装基于域的多站点,但无法访问wp-admin(重定向循环)

我已经在我的服务器上安装了一个基于域的多站点,包括每个子域,一切都正常。这里我应该解释一下,我导入了一个位于本地Mac上的数据库,然后更改了每个站点数据库中的详细信息。然而,我现在无法访问主域或任何子域的wp admin,Chrome只是告诉我有一个重定向循环(http://cl.ly/Qg7K). 让我澄清一下,我根本无法访问wp admin,即甚至连登录页面都无法访问。我对Wordpress、数据库和服务器很有信心,所以我很可能会为您取回任何数据,并进行测试、尝试修复等。谢谢你的帮助!EDIT: 人们