Как использовать и проверять simple_php_captcha по ajax? - PullRequest
0 голосов
/ 13 июля 2020

Я использовал simple_php_captcha a captcha в настраиваемую форму входа для WordPress в моем веб-сайте и все в порядке. но теперь я хочу создать пользовательскую форму входа в систему с jQuery и AJAX. все в порядке, но мне нужно, чтобы капча была обновлена ​​sh после нажатия кнопки отправки при использовании AJAX. . Итак, теперь мой вопрос: как использовать капчу в форме входа AJAX, чтобы она обновлялась после нажатия на кнопку отправки, и как проверить код капчи с помощью AJAX ??? . Конечно, я нашел следующий вопрос, но не мог этого понять: https://github.com/yasirmturk/simple-php-captcha/issues/14.

Заранее спасибо всем за помощь.

мой код на странице шаблона:

<div id="sh-ajax-login-wrapper" class="sh-ajax-login-wrapper">

    <div class="ajax-login-message error" style="display: none;"></div>

    <form action="<?php echo get_permalink(); ?>" name="sh-ajax-login-form" id="sh-ajax-login-form" method="post">
        <input type="text" name="usernameloginajax" id="usernameloginajax" placeholder:"email/username" required>
        <input type="password" name="passwordloginajax" id="passwordloginajax" placeholder="password" required>
        <input type="checkbox" name="rememberme" id="rememberme">
        <label for="rememberme">remember me</label>
        <input type="submit" id="sh-ajax-login-submit" value="login">

        <?php wp_nonce_field('ajax-login-form-nonce','security'); ?>

    </form>
</div>  

.

мой код для AJAX:

jQuery(document).ready(function ($) {
    
    $('#sh-ajax-login-form').on('submit',function(event){
        event.preventDefault();
        var $this  = $(this);
        var $username = $this.find('#usernameloginajax').val();
        var $password = $this.find('#passwordloginajax').val();
        var $security = $this.find('#security').val();
        var $remember = $this.find('#rememberme').prop('checked');
        
        var $message = $('.ajax-login-message');
        
        $message.slideUp(300);
        
        if( $username === "" || $password === "" ){
            $message.html('<p>fill them all</p>').slideDown(300);
            return false;
        }

        $.ajax({
            url:data.ajax_url,
            type:'post',
            dataType:'json',
            data : {
                action:'sh_ajax_login_form',
                username: $username,
                password: $password,
                remember: $remember,
                security: $security
            },
            success:function(response){

                if( response.error ){
                    $message.html('<p>'+response.message+'</p>').slideDown(300);
                }
                if( response.success ){
                    $message.removeClass('error').addClass('success').html('<p>'+response.message+'</p>').slideDown(300);
                    //window.location.href = 'http://7learn.dev/profile';
                    //window.location.href = data.redirecturlajax;
                }

            },
            error: function () {}

        });
    });
    
});

.

мой код в функциях. php:

<?php

add_action('wp_ajax_nopriv_sh_ajax_login_form','sh_ajax_login_form');
function sh_ajax_login_form(){
    
    check_ajax_referer('ajax-login-form-nonce','security',true);

    $username = sanitize_text_field($_POST['username']);
    $password = sanitize_text_field($_POST['password']);
    $rememberme = isset($_POST['rememberme']);
    
    if( empty($username)  || empty($password) ){

        $result = array(
            'error' => true,
            'message' => 'fill them all'
        );
        wp_send_json($result);
        
    }
    
    $creds = array(
        'user_login'    => $username,
        'user_password' => $password,
        'rememember'    => $rememberme
    );
    $login_user = wp_signon($creds,false);

    if( is_wp_error($login_user)){

        $result = array(
            'error' => true,
            'message' => 'Incorrect email/username or password'
        );
        wp_send_json($result);

    }

    $result = array(
        'success' => true,
        'message' => 'you logged in'
    );
    wp_send_json($result);

}
...