Rumah > Tutorial CMS > WordTekan > Mengintegrasikan Captcha dengan borang log masuk WordPress

Mengintegrasikan Captcha dengan borang log masuk WordPress

尊渡假赌尊渡假赌尊渡假赌
Lepaskan: 2025-02-19 09:52:08
asal
229 orang telah melayarinya

Tutorial ini menunjukkan membina plugin WordPress yang mengintegrasikan Google Recaptcha ke dalam sistem log masuk WordPress. Plugin menggunakan API HTTP untuk menghantar permintaan pos ke Recaptcha, mengesahkan respons pengguna Captcha.

Pembangunan plugin melibatkan mewujudkan kelas PHP dengan sifat untuk kekunci Recaptcha, menambah CAPTCHA ke borang log masuk, dan mengesahkan respons. Kod ini menunjukkan cara menghantar permintaan pos kepada https://www.google.com/recaptcha/api/verify dengan parameter yang diperlukan. Ini meningkatkan keselamatan laman web dengan membezakan manusia dari bot, menghalang percubaan akses yang tidak dibenarkan.

Tutorial sebelumnya meneroka API WordPress HTTP. Tutorial ini dibina pada itu, mempamerkan penggunaan API dalam plugin WordPress. Kami sebelum ini membina domain WHOIS dan WordPress WordPress Domain WordPress menggunakan API HTTP.

di bawah adalah tangkapan skrin borang log masuk WordPress dengan CAPTCHA bersepadu:

Integrating a CAPTCHA with the WordPress Login Form

Pembangunan plugin

sebelum pengekodan, daftar domain anda di Recaptcha dan dapatkan kunci API awam dan swasta anda.

1. Plugin Header:

<?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
*/
Salin selepas log masuk

2. Kelas PHP:

Buat kelas PHP untuk menyimpan kekunci Recaptcha:

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=<?=$this->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();
Salin selepas log masuk

3. Plugin Instantiation:

Akhirnya, instantiate kelas:

new reCAPTCHA_Login_Form();
Salin selepas log masuk
Ini melengkapkan kod plugin. Muat turun plugin lengkap untuk digunakan atau kajian lanjut. Ini adalah sebahagian daripada siri yang menunjukkan penggunaan API HTTP WordPress dalam plugin.

(bahagian Soalan Lazim dikeluarkan untuk keringkasan, kerana ia tidak memerlukan penulisan semula untuk pseudo-asal. Kandungannya adalah faktual dan tidak memerlukan perubahan.)

Atas ialah kandungan terperinci Mengintegrasikan Captcha dengan borang log masuk WordPress. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan