Wordpress自定义用户身份验证


Wordpress Custom User Authentication

我插入了两个名为user_login_statusactivation_code的自定义字段在CCD_ 3表中。

我在login页面上的代码

function dlf_auth( $username, $password ) {
global $user;
get_currentuserinfo();
$creds = array();
$creds['user_login'] = $username;
$creds['user_password'] =  $password;
$creds['remember'] = true;
$user = wp_signon( $creds, false );

if ( is_wp_error($user) ) {
       //get user email
       $email = $_POST['login_name'];
       $users= get_user_by( 'email', $email );//
       $key = 'user_login_status';
       //get user login status
       $user_status = get_user_meta( $users->ID, $key);
       $user_approve = $user_status[0];
       $error_msg = '';
       //if email does not exist in DB
       if(!email_exists( $email ) ){
       $error_msg = 'ERROR: E-mail address does not exist.';       
       //if user is not approved
       }elseif($user_approve == 0){
       $error_msg = 'ERROR: Your account is not activated.';
       //if invalid email or password
       }else{
       $error_msg = 'ERROR: Invalid e-mail address or password.';
       }
       echo $error_msg;
} 
if ( !is_wp_error($user)) {
    wp_redirect(site_url().'/overview');
    exit();
}
}

在这里,如果帐户尚未激活,我无法验证用户。用户仍然可以登录。

如何使用用户meta_data检查身份验证?我不想修改核心wp_user表。

函数wp_signon是否未检查额外的meta_data验证?

WordPress本身并不像验证,所以这是你自己添加的东西。因此,在使用wp_signon登录用户之前,您应该检查批准信息。

几天前我遇到了与我发现的解决方案相同的问题,我需要在ajax基础上使用自定义用户身份验证,请检查下面的代码

<?php

    function custom_login_form() {
        if(!empty($_POST) && $_POST['action'] == 'custom_login_form') {
            $creds = array();
            $creds['user_login'] = $_REQUEST['username'];
            $creds['user_password'] = $_REQUEST['password'];
            $creds['remember'] = false;
            $user = wp_signon( $creds, false ); 
            if(!is_wp_error($user)) {
                if(!empty($user) ) {
                /* Use custom query or condition here for check extra values */
                    $customCondition = true
                     if($customCondition) {
                         return true;
                    } else {
                        wp_logout();
                        return false;
                    }
                } else {
                    return false;
                }
            } else {
                return false;
            }
        } else {
            return false;
        }
    }