Heim >CMS-Tutorial >WordDrücken Sie >Integration eines Captcha in das WordPress -Anmeldeformular

Integration eines Captcha in das WordPress -Anmeldeformular

尊渡假赌尊渡假赌尊渡假赌
尊渡假赌尊渡假赌尊渡假赌Original
2025-02-19 09:52:08234Durchsuche

Dieses Tutorial zeigt, ein WordPress -Plugin zu erstellen, das Google Recaptcha in das WordPress -Anmeldesystem integriert. Das Plugin verwendet die HTTP -API, um eine Postanforderung an Recaptcha zu senden, wobei Benutzer captcha -Antworten validiert.

Die Plugin -Entwicklung beinhaltet das Erstellen einer PHP -Klasse mit Eigenschaften für Recaptcha -Schlüssel, das Hinzufügen der Captcha zum Anmeldeformular und die Validierung der Antworten. Der Code zeigt, wie eine Postanforderung mit den erforderlichen Parametern an https://www.google.com/recaptcha/api/verify sendet. Dies verbessert die Sicherheit der Website, indem Menschen von Bots unterschieden werden, wodurch nicht autorisierte Zugriffsversuche verhindern.

In einem früheren Tutorial wurde die WordPress HTTP -API untersucht. Dieses Tutorial baut darauf auf und zeigt den API -Konsum innerhalb eines WordPress -Plugins. Wir haben zuvor ein Domain Whois und Social Data WordPress -Widget mit der HTTP -API erstellt.

unten finden Sie einen Screenshot des WordPress -Anmeldeformulars mit dem integrierten Captcha:

Integrating a CAPTCHA with the WordPress Login Form

Plugin -Entwicklung

Vor dem Codieren registrieren Sie Ihre Domain auf Recaptcha und erhalten Sie Ihre öffentlichen und privaten API -Schlüssel.

1. Plugin -Header:

<code class="language-php"><?php
/*
Plugin Name: WP Login Form with reCAPTCHA
Plugin URI: https://www.sitepoint.com
Description: Adds Google's reCAPTCHA to WordPress Login
Version: 1.0
Author: Agbonghama Collins
Author URI: http://w3guy.com
License: GPL2
*/</code>

2. PHP -Klasse:

Erstellen Sie eine PHP -Klasse zum Speichern von Recaptcha -Tasten:

<code class="language-php">class reCAPTCHA_Login_Form {
    private $public_key, $private_key;

    public function __construct() {
        $this->public_key  = '6Le6d-USAAAAAFuYXiezgJh6rDaQFPKFEi84yfMc';
        $this->private_key = '6Le6d-USAAAAAKvV-30YdZbdl4DVmg_geKyUxF6b';

        add_action( 'login_form', array( $this, 'captcha_display' ) );
        add_action( 'wp_authenticate_user', array( $this, 'validate_captcha_field' ), 10, 2 );
    }

    public function captcha_display() {
        ?>
        
        <noscript>
            <iframe src="https://www.google.com/recaptcha/api/noscript?k=<?=%24this->public_key?>" height="300" width="300" frameborder="0"></iframe><br><br>
            <textarea name="recaptcha_challenge_field" rows="3" cols="40"></textarea>
            <input type="hidden" name="recaptcha_response_field" value="manual_challenge">
        </noscript>
        <?php
    }

    public function validate_captcha_field($user, $password) {
        if ( ! isset( $_POST['recaptcha_response_field'] ) || empty( $_POST['recaptcha_response_field'] ) ) {
            return new WP_Error( 'empty_captcha', 'CAPTCHA cannot be empty' );
        }

        if( isset( $_POST['recaptcha_response_field'] ) && $this->recaptcha_response() === 'false' ) {
            return new WP_Error( 'invalid_captcha', 'Incorrect CAPTCHA response' );
        }

        return $user;
    }

    public function recaptcha_response() {
        $challenge = isset($_POST['recaptcha_challenge_field']) ? esc_attr($_POST['recaptcha_challenge_field']) : '';
        $response  = isset($_POST['recaptcha_response_field']) ? esc_attr($_POST['recaptcha_response_field']) : '';
        $remote_ip = $_SERVER["REMOTE_ADDR"];

        $post_body = array(
            'privatekey' => $this->private_key,
            'remoteip'   => $remote_ip,
            'challenge'  => $challenge,
            'response'   => $response
        );

        return $this->recaptcha_post_request( $post_body );
    }

    public function recaptcha_post_request( $post_body ) {
        $args = array( 'body' => $post_body );
        $request = wp_remote_post( 'https://www.google.com/recaptcha/api/verify', $args );
        $response_body = wp_remote_retrieve_body( $request );
        $answers = explode( "\n", $response_body );
        $request_status = trim( $answers[0] );
        return $request_status;
    }
}

new reCAPTCHA_Login_Form();</code>

3. Plugin -Instanziierung:

endlich die Klasse instanziieren:

<code class="language-php">new reCAPTCHA_Login_Form();</code>

Dies vervollständigt den Plugin -Code. Laden Sie das komplette Plugin zum Gebrauch oder weitere Untersuchung herunter. Dies ist Teil einer Serie, die WordPress HTTP -API -Verwendung in Plugins zeigt.

(FAQS-Abschnitt für die Kürze entfernt, da es für Pseudooriginalität nicht neu geschrieben werden muss. Der Inhalt ist sachlich und erfordert keine Änderung.)

Das obige ist der detaillierte Inhalt vonIntegration eines Captcha in das WordPress -Anmeldeformular. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn