2015-02-06 83 views
0

我已經在wp_usermeta表中插入了兩個名爲user_login_statusactivation_code 的自定義字段。Wordpress定製用戶身份驗證

我的代碼上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驗證?

回答

0

WordPress本身並不像驗證,所以這就是你自己添加的東西。因此,你應該檢查之前使用wp_signon登錄用戶英寸

0

我面臨同樣的問題比我發現這個解決方案,我需要在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; 
     } 

    }