我插入了两个名为user_login_status
和activation_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;
}
}