Jaz*_*zyP 0 authentication wordpress
我在注册时添加了自定义字段,以允许用户输入自己的密码,还创建了代码以生成验证码,然后将该验证码通过电子邮件发送给用户。当然,用户需要先单击电子邮件中的链接,然后才能登录。
这就是我被困住的地方。我试图添加我自己的身份验证,以在用户尝试登录时检查验证状态。
这是我的代码不起作用;
function check_validation_status($username) {
$user = get_user_by('login', $username);
$userID = $user->ID;
$status = get_user_meta($userID, 'verified', true);
if($status == '0') {
return;
}
}
add_action('wp_authenticate', 'check_validation_status');
Run Code Online (Sandbox Code Playgroud)
不幸的是,这段代码似乎没有任何作用。我也尝试了以下方法(进行其他操作)
function check_validation_status($username) {
$user = get_user_by('login', $username);
$userID = $user->ID;
$status = get_user_meta($userID, 'verified', true);
if($status == '0') {
wp_logout(); // works but doesn't show an error :(
}
}
add_action('wp_login', 'check_validation_status');
Run Code Online (Sandbox Code Playgroud)
如果未验证用户,此代码将成功地直接记录用户,但是它不会向用户显示任何形式的错误,只是将他们直接重定向回登录页面。
登录用户但直接退出似乎是一种草率的方式,是否有一种方法可以阻止登录?
我已经设法解决了这个问题。相反,我需要挂接到wp_authenticate_user并返回WP_Error。这是我的工作代码,希望它对以后的工作有所帮助。
function check_validation_status($user, $password) {
$userID = $user->ID;
$status = get_user_meta($userID, 'verified', true);
if($status == '0') {
$errors = new WP_Error();
$errors->add('title_error', __('<strong>ERROR</strong>: This account has not been verified.', 'podium'));
return $errors;
}
return $user;
}
add_action('wp_authenticate_user', 'check_validation_status', 10, 2);
Run Code Online (Sandbox Code Playgroud)