WordPress添加自定义登录身份验证

时间:2014-04-21 08:38:39

标签: wordpress authentication

我在注册时添加了自定义字段,允许用户输入自己的密码,并创建代码以生成验证码,然后通过电子邮件发送给用户。当然,用户需要先点击电子邮件中的链接才能登录。

这里是我被困的地方。我正在尝试添加自己的身份验证,以便在用户尝试登录时检查验证状态。

这是我的代码,它不起作用;

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');

不幸的是,这段代码似乎没有做任何事情。我也尝试过以下内容(挂钩进行不同的操作)

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');

如果用户未经过验证,此代码会成功记录用户,但是如果用户没有显示任何形式的错误,他们只会直接重定向到登录页面。

记录用户但直接退出似乎是一种草率的方式,有没有办法防止首先登录?

1 个答案:

答案 0 :(得分:4)

我现在设法解决了这个问题。我需要挂钩到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);