WordPress中的身份验证是如何工作的?WP_AUTIFICATE_USERNAME_PASSWORD()

时间:2013-12-26 作者:Prabah

function wp_authenticate_username_password($user, $username, $password) {
if ( is_a($user, \'WP_User\') ) { return $user; }

if ( empty($username) || empty($password) ) {
    $error = new WP_Error();

    if ( empty($username) )
        $error->add(\'empty_username\', __(\'<strong>ERROR</strong>: The username field is empty.\'));

    if ( empty($password) )
        $error->add(\'empty_password\', __(\'<strong>ERROR</strong>: The password field is empty.\'));

    return $error;
}

$userdata = get_user_by(\'login\', $username);

if ( !$userdata )
    return new WP_Error(\'invalid_username\', sprintf(__(\'<strong>ERROR</strong>: Invalid username. <a href="%s" title="Password Lost and Found">Lost your password</a>?\'), wp_lostpassword_url()));

if ( is_multisite() ) {
    // Is user marked as spam?
    if ( 1 == $userdata->spam)
        return new WP_Error(\'invalid_username\', __(\'<strong>ERROR</strong>: Your account has been marked as a spammer.\'));

    // Is a user\'s blog marked as spam?
    if ( !is_super_admin( $userdata->ID ) && isset($userdata->primary_blog) ) {
        $details = get_blog_details( $userdata->primary_blog );
        if ( is_object( $details ) && $details->spam == 1 )
            return new WP_Error(\'blog_suspended\', __(\'Site Suspended.\'));
    }
}

$userdata = apply_filters(\'wp_authenticate_user\', $userdata, $password);
if ( is_wp_error($userdata) )
    return $userdata;

if ( !wp_check_password($password, $userdata->user_pass, $userdata->ID) )
    return new WP_Error( \'incorrect_password\', sprintf( __( \'<strong>ERROR</strong>: The password you entered for the username <strong>%1$s</strong> is incorrect. <a href="%2$s" title="Password Lost and Found">Lost your password</a>?\' ),
    $username, wp_lostpassword_url() ) );

$user =  new WP_User($userdata->ID);
return $user;
}
这是我在wordpress中找到的代码。但我在里面冲浪,但我无法找到在哪里检索数据库的用户名或密码。我只想知道wordpress使用什么查询来检索密码和用户名。

1 个回复
SO网友:Otto

这是您正在寻找的产品线:

$userdata = get_user_by(\'login\', $username);

这个get_user_by 函数调用WP_User::get_data_by 该函数最终执行以下SQL:

SELECT * FROM $wpdb->users WHERE user_login = $username

哈希密码将包含在该查询的结果中。最终wp_check_password 函数将被调用以比较哈希值。

结束

相关推荐

如何使用PASSWORD_RESET挂钩验证新密码并显示错误

当用户通过密码重置电子邮件中的链接重置密码时,我知道我可以使用password_reset 钩子以获取用户对象和新密码。我想验证新密码以确保满足强度要求,但我不确定如何生成错误消息,以便它们显示在表单上方。当我通过user_profile_update_errors 胡克,我有一个WP_Error 我可以增加,但不能用这个钩子。处理这个问题的最佳方法是什么?