web-dev-qa-db-fra.com

Connexion personnalisée à ReCaptcha

J'essaie d'ajouter ReCaptcha à ma page de connexion. Je sais qu'il y a beaucoup de plugins par requête que je ne peux pas utiliser. Jusqu'ici tout va bien, je peux ajouter le Captcha à mon identifiant mais je ne peux pas afficher les erreurs.

Lorsque je saisis un mot de passe incorrect, le message d'erreur s'affiche, mais si je saisis le bon mot de passe sans saisir le Captcha, je ne reçois pas d'erreur (ce que je devrais obtenir une erreur Captcha non renseignée). Donc, la fonction captcha_errors n'est activée que lorsque le nom d'utilisateur/mot de passe est incorrect.

Comment obtenir mon formulaire de connexion pour vérifier ReCaptcha avant de vérifier les informations de connexion?

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

Utilisez ce plugin à cette fin SI Captcha

1
Moaz Ateeq