web-dev-qa-db-de.com

Benutzerdefinierte ReCaptcha-Anmeldung

Ich versuche, ReCaptcha zu meiner Anmeldeseite hinzuzufügen. Ich weiß, dass es sehr viele Plugins gibt, von denen ich auf Anfrage keine Plugins verwenden kann. Soweit so gut, kann ich das Captcha meinem Login hinzufügen, aber keine Fehler anzeigen.

Wenn ich das falsche Passwort eingebe, kommt es zu einem Fehler. Wenn ich jedoch das richtige Passwort eingebe und das Captcha nicht eingebe, erhalte ich keine Fehler (bei einem nicht ausgefüllten Captcha-Fehler sollte dies der Fall sein). Das einzige Mal, dass meine captcha_errors -Funktion ausgelöst wird, ist, wenn Benutzername/Passwort falsch sind.

Wie kann ich mit meinem Anmeldeformular das ReCaptcha überprüfen, bevor ich die Anmeldeinformationen überprüfe?

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);
5
Derp

Verwenden Sie dieses Plugin für diesen Zweck SI Captcha

1
Moaz Ateeq