web-dev-qa-db-fra.com

Comment fonctionne l'authentification dans wordpress? wp_authenticate_username_password ()

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;
}

C'est le code que j'ai trouvé dans wordpress. mais j'ai surfé à l'intérieur mais je ne peux pas trouver où le nom d'utilisateur ou mot de passe est récupéré pour la base de données. je veux juste savoir quelle requête est utilisée par wordpress pour récupérer le mot de passe et le nom d'utilisateur.

1
Prabah

Ceci est la ligne que vous recherchez:

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

La fonction get_user_by appelle WP_User::get_data_by et cette fonction exécute finalement ce SQL:

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

Le mot de passe haché sera contenu dans les résultats de cette requête. Finalement, la fonction wp_check_password sera appelée pour comparer les hachages.

2
Otto