Php Wordpress Ajax登录错误消息

Php Wordpress Ajax登录错误消息,php,ajax,wordpress,login,Php,Ajax,Wordpress,Login,我正在尝试为wordpress开发一个登录ajax表单。这个插件似乎工作得很好。如果我插入了正确的用户名和密码,登录将正常工作并显示正确的消息,然后重定向到正确的页面,但是如果我插入了错误的用户名和密码值,则不会发生任何情况,错误消息也不会出现 似乎该函数是_wp_error,不回显该错误 你知道为什么吗?在我的代码下面 谢谢你 PHP 看来你的方向是对的。为了填补一些空白,我对您的代码做了一些更改。在WordPress中提交敏感(或任何)数据时,强烈建议清理从$POST收集的所有数据 此外,我

我正在尝试为wordpress开发一个登录ajax表单。这个插件似乎工作得很好。如果我插入了正确的用户名和密码,登录将正常工作并显示正确的消息,然后重定向到正确的页面,但是如果我插入了错误的用户名和密码值,则不会发生任何情况,错误消息也不会出现

似乎该函数是_wp_error,不回显该错误

你知道为什么吗?在我的代码下面

谢谢你

PHP


看来你的方向是对的。为了填补一些空白,我对您的代码做了一些更改。在WordPress中提交敏感(或任何)数据时,强烈建议清理从
$POST
收集的所有数据

此外,我们通过简单检查用户名或电子邮件的存在来验证收集的凭据,如果检查正常,我们将定义在成功登录时验证用户所需的用户数据,用户在直接访问
/wp admin/
时也将登录到管理仪表板。我们通过清除所有旧的身份验证cookie并为当前用户设置新的cookie来实现这一点

虽然这里没有什么新的进展,但这些步骤已经证明可以减少在WordPress中通过Ajax对用户进行身份验证时最常见的问题

我已经测试了该函数,它似乎没有问题,因为
is\wp\u error()
抛出了错误消息。此外,我还添加了一种可选的简单方法,用于捕获最常见的错误消息,然后进行自定义。我希望它能让你进步

function met_login_member() {

// First check the nonce, if it fails the function will break
if( !check_ajax_referer( 'ajax-login-nonce', 'login-security' ) ) {

    echo json_encode(array('error' => true, 'message'=> '<div class="alert alert-danger">'.__('Session token has expired, please reload the page and try again', 'met').'</div>'));

    die();

}

// Nonce is checked, get the POST data and sign the user on
$creds = array();
$creds['user_login']    = !empty( $_POST['met_user_login'] ) ? sanitize_user( trim($_POST['met_user_login']) ) : NULL; 
$creds['user_password'] = !empty( $_POST['met_user_pass'] ) ? sanitize_text_field( trim($_POST['met_user_pass']) ) : NULL; 
$creds['remember'] = true;

// Pass login details through wp_signon()
// wp_signon() accepts an optional boolean parameter false OR true, whether to use a secure cookie in case of running a website over SSL.
$user_creds = wp_signon( $creds, false );

$user_login     = (string) sanitize_user( $_POST['met_user_login'] );
$user_pass      = (string) sanitize_text_field( trim($_POST['met_user_pass']) );

// ---- CHECK IF USERNAME OR EMAIL EXISTS ---- //
if (username_exists($user_login)) {

    $user_exists = (bool)   true;
    $user        = (object) get_user_by('login', $user_login);

} elseif (email_exists($user_login)) {

    $user_exists = (bool)   true;
    $user        = (object) get_user_by('email', $user_login);

} else {

    $error = new WP_Error( 'no_user_found', 'Username or Email was not found, please try again', 'Page Data' );

    //echo json_encode( array( 'error' => true, 'message'=> '<div class="alert alert-danger">'.__('Username or Email was not found, please try again', 'met').'</div>') );
    //die();

} // end else

if ($user_exists === (bool) true) {

    // Define user data

    $user_id = $user->ID;
    $user_data = get_userdata($user_id);

    $username = $user_data->user_login;
    $userpass = $user_data->user_pass;

}

// ---- CHECK FOR EMPTY / INCORRECT DATA  ---- //
if( empty( $user_login ) && empty( $user_pass ) ){

    echo json_encode( array( 'error' => true, 'message'=> '<div class="alert alert-danger">'.__('The username and password cannot be empty', 'met').'</div>') );
    die();

} elseif ( is_wp_error( $user_signon ) ) {

    echo json_encode( array( 'error' => true, 'message'=> '<div class="alert alert-danger">'.$user_signon->get_error_message().'</div>') );
    die();

    // Optionally catch & customize error messages

    // $signon_errors = $user_creds->get_error_codes();

    // if ( in_array( 'invalid_username', $signon_errors ) ) {
    //     echo json_encode( array( 'error' => true, 'message'=> '<div class="alert alert-danger">'.__('Wrong username or email', 'met').'</div>') );
    //     die();    

    // } elseif ( in_array( 'empty_username', $signon_errors ) ) {
    //     echo json_encode( array( 'error' => true, 'message'=> '<div class="alert alert-danger">'.__('The username or email cannot be empty', 'met').'</div>') );
    //     die();

    // } elseif ( in_array( 'empty_password', $signon_errors ) ) {
    //     echo json_encode( array( 'error' => true, 'message'=> '<div class="alert alert-danger">'.__('The password field cannot be empty', 'met').'</div>') );
    //     die();

    // } elseif ( in_array( 'incorrect_password', $signon_errors ) ) {
    //     echo json_encode( array( 'error' => true, 'message'=> '<div class="alert alert-danger">'.__('Wrong password', 'met').'</div>') );
    //     die();   

    // } else {
    //     echo json_encode( array( 'error' => true, 'message'=> '<div class="alert alert-danger">'.__('Wrong username or password', 'met').'</div>') );
    //     die();

    // }

} else {

    wp_clear_auth_cookie();
    wp_set_current_user( $user_id, $username );
    wp_set_auth_cookie( $user_id );

    echo json_encode(array('error' => false, 'message'=> '<div class="alert alert-success">'.__('Login successful, reloading page...', 'met').'</div>'));

    die();

}

    die();

}
函数met\u login\u member(){
//首先检查nonce,如果失败,函数将中断
如果(!check_ajax_referer('ajax login nonce','login security')){
echo json_encode(数组('error'=>true,'message'=>''。uuu('Session token已过期,请重新加载页面并重试,'met'));
模具();
}
//一旦选中,获取POST数据并让用户登录
$creds=array();
$creds['user\u login']=!空($\u POST['met\u user\u login'])?清理用户(trim($\u POST['met\u user\u login']):空;
$creds['user\u password']=!空($\u POST['met\u user\u pass'])?清理文本字段(修剪($\u POST['met\u user\u pass']):空;
$creds['memory']=true;
//通过wp_signon()传递登录详细信息
//wp_signon()接受可选的布尔参数false或true,无论在通过SSL运行网站时是否使用安全cookie。
$user\u creds=wp\u signon($creds,false);
$user\u login=(字符串)清理用户($\u POST['met\u user\u login']);
$user\u pass=(字符串)清理文本字段(修剪($\u POST['met\u user\u pass']);
//----检查用户名或电子邮件是否存在--//
如果(用户名\u存在($user\u登录)){
$user_exists=(bool)true;
$user=(object)get_user_by('login',$user_login);
}elseif(电子邮件存在($user\u登录)){
$user_exists=(bool)true;
$user=(object)get_user_by('email',$user_login);
}否则{
$error=新的WP_错误('no_user_found'、'Username或Email未找到,请重试'、'Page Data');
//echo json_encode(数组('error'=>true,'message'=>''。uuu('Username或Email未找到,请重试,'met'));
//模具();
}//结束其他
如果($user_exists==(bool)true){
//定义用户数据
$user\u id=$user->id;
$user\u data=get\u userdata($user\u id);
$username=$user\u data->user\u login;
$userpass=$user\u data->user\u pass;
}
//----检查是否有空/不正确的数据--//
if(空($user\u login)&&empty($user\u pass)){
echo json_encode(数组('error'=>true,'message'=>''。uuu('username和password不能为空,'met'));
模具();
}elseif(is_wp_error($user_signon)){
echo json_encode(数组('error'=>true,'message'=>'.$user\u signon->get\u error\u message());
模具();
//可以选择捕获和自定义错误消息
//$signon\u errors=$user\u creds->get\u error\u code();
//if(在数组中('invalid_username',$signon_errors)){
//echo json_encode(数组('error'=>true,'message'=>''。uuu('error username或email','met'));
//模具();
//}elseif(在_数组中('empty_username',$signon_errors)){
//echo json_encode(数组('error'=>true,'message'=>''。uuu('username或email不能为空,'met'));
//模具();
//}elseif(在_数组中('empty_password',$signon_errors)){
//echo json_encode(数组('error'=>true,'message'=>''。uu('password字段不能为空,'met'));
//模具();
//}elseif(在数组中('error\u password',$signon\u errors)){
//echo json_encode(数组('error'=>true,'message'=>''。uu('error password','met'));
//模具();
//}其他{
//echo json_encode(数组('error'=>true,'message'=>''。uuu('error username或password','met'));
//模具();
// }
}否则{
wp_clear_auth_cookie();
wp\u set\u当前用户($user\u id,$username);
wp_set_auth_cookie($user_id);
echo json_encode(数组('error'=>false,'message'=>''。uuu('Login successful,reloading page…','met'));
模具();
}
模具();
}

看来你正朝着正确的方向前进。为了填补一些空白,我对您的代码做了一些更改。在WordPress中提交敏感(或任何)数据时,强烈建议清理从
$POST
收集的所有数据

此外,我们通过简单检查用户名或电子邮件的存在来验证收集的凭据,如果检查正常,我们将定义在成功登录时验证用户所需的用户数据,用户在直接访问
/wp admin/
时也将登录到管理仪表板。我们通过清除所有旧的身份验证cookie并为当前用户设置新的cookie来实现这一点

虽然这里没有什么新的进展,但这些步骤已经证明可以减少大多数co
<div class="user-modal">

        <div class="user-modal-container">

            <ul class="switcher">

                <li><span><?php _e('Sign in', 'met'); ?></span></li>

                <li><span><?php _e('New Account', 'met'); ?></span></li>

            </ul>

            <div class="modal-login">

                <form id="login-form" class="modal-form" action="<?php echo home_url( '/' ); ?>" method="post" />

                    <p class="fieldset">

                        <label class="image-replace email" for="signin-email"><?php _e('Username', 'met'); ?></label>

                        <input id="user-login" class="full-width has-padding has-border" type="text" name="met_user_login" placeholder="<?php _e('Username', 'met'); ?>" value="" size="20" tabindex="10" required />

                    </p>

                    <p class="fieldset">

                        <label class="image-replace password" for="signin-password"><?php _e('Password', 'met'); ?></label>

                        <input id="user-pass" class="full-width has-padding has-border" type="password" name="met_user_pass" placeholder="<?php _e('Password', 'met'); ?>" value="" size="20" tabindex="20" required />

                        <span class="show-password"><?php _e('Show', 'met'); ?></span>

                    </p>

                    <p class="fieldset">

                        <label class="checkbox" for="rememberme">

                            <input name="rememberme" type="checkbox" id="rememberme" value="forever" tabindex="90"><?php _e('Remember me', 'met'); ?>

                        </label>

                    </p>

                    <p class="fieldset">

                        <button id="wp-submit" class="full-width" data-loading-text="<?php _e('Loading...', 'met') ?>" type="submit"><?php _e('Sign In', 'met'); ?></button>

                        <input type="hidden" name="action" value="met_login_member" />

                    </p>

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

                </form>

                <div class="errors"></div>

                <p class="modal-form-bottom-message"><span><?php _e('Lost your password?', 'met'); ?></span></p>

            </div>

    </div>
</div>
$('button').on('click', function(e) {

    e.preventDefault();

    $.post(loginajax.ajaxurl, $('#login-form').serialize(), function(data) {

        var obj = $.parseJSON(data);

        $('.modal-login .errors').html(obj.message);

        if(obj.error === false) {
            window.location.reload(true);
        } else if(obj.error === true) {
            $('.alert-danger').delay(2000).fadeOut('slow',function(){$(this).hide();});
        }


    });

});
function met_login_member() {

// First check the nonce, if it fails the function will break
if( !check_ajax_referer( 'ajax-login-nonce', 'login-security' ) ) {

    echo json_encode(array('error' => true, 'message'=> '<div class="alert alert-danger">'.__('Session token has expired, please reload the page and try again', 'met').'</div>'));

    die();

}

// Nonce is checked, get the POST data and sign the user on
$creds = array();
$creds['user_login']    = !empty( $_POST['met_user_login'] ) ? sanitize_user( trim($_POST['met_user_login']) ) : NULL; 
$creds['user_password'] = !empty( $_POST['met_user_pass'] ) ? sanitize_text_field( trim($_POST['met_user_pass']) ) : NULL; 
$creds['remember'] = true;

// Pass login details through wp_signon()
// wp_signon() accepts an optional boolean parameter false OR true, whether to use a secure cookie in case of running a website over SSL.
$user_creds = wp_signon( $creds, false );

$user_login     = (string) sanitize_user( $_POST['met_user_login'] );
$user_pass      = (string) sanitize_text_field( trim($_POST['met_user_pass']) );

// ---- CHECK IF USERNAME OR EMAIL EXISTS ---- //
if (username_exists($user_login)) {

    $user_exists = (bool)   true;
    $user        = (object) get_user_by('login', $user_login);

} elseif (email_exists($user_login)) {

    $user_exists = (bool)   true;
    $user        = (object) get_user_by('email', $user_login);

} else {

    $error = new WP_Error( 'no_user_found', 'Username or Email was not found, please try again', 'Page Data' );

    //echo json_encode( array( 'error' => true, 'message'=> '<div class="alert alert-danger">'.__('Username or Email was not found, please try again', 'met').'</div>') );
    //die();

} // end else

if ($user_exists === (bool) true) {

    // Define user data

    $user_id = $user->ID;
    $user_data = get_userdata($user_id);

    $username = $user_data->user_login;
    $userpass = $user_data->user_pass;

}

// ---- CHECK FOR EMPTY / INCORRECT DATA  ---- //
if( empty( $user_login ) && empty( $user_pass ) ){

    echo json_encode( array( 'error' => true, 'message'=> '<div class="alert alert-danger">'.__('The username and password cannot be empty', 'met').'</div>') );
    die();

} elseif ( is_wp_error( $user_signon ) ) {

    echo json_encode( array( 'error' => true, 'message'=> '<div class="alert alert-danger">'.$user_signon->get_error_message().'</div>') );
    die();

    // Optionally catch & customize error messages

    // $signon_errors = $user_creds->get_error_codes();

    // if ( in_array( 'invalid_username', $signon_errors ) ) {
    //     echo json_encode( array( 'error' => true, 'message'=> '<div class="alert alert-danger">'.__('Wrong username or email', 'met').'</div>') );
    //     die();    

    // } elseif ( in_array( 'empty_username', $signon_errors ) ) {
    //     echo json_encode( array( 'error' => true, 'message'=> '<div class="alert alert-danger">'.__('The username or email cannot be empty', 'met').'</div>') );
    //     die();

    // } elseif ( in_array( 'empty_password', $signon_errors ) ) {
    //     echo json_encode( array( 'error' => true, 'message'=> '<div class="alert alert-danger">'.__('The password field cannot be empty', 'met').'</div>') );
    //     die();

    // } elseif ( in_array( 'incorrect_password', $signon_errors ) ) {
    //     echo json_encode( array( 'error' => true, 'message'=> '<div class="alert alert-danger">'.__('Wrong password', 'met').'</div>') );
    //     die();   

    // } else {
    //     echo json_encode( array( 'error' => true, 'message'=> '<div class="alert alert-danger">'.__('Wrong username or password', 'met').'</div>') );
    //     die();

    // }

} else {

    wp_clear_auth_cookie();
    wp_set_current_user( $user_id, $username );
    wp_set_auth_cookie( $user_id );

    echo json_encode(array('error' => false, 'message'=> '<div class="alert alert-success">'.__('Login successful, reloading page...', 'met').'</div>'));

    die();

}

    die();

}