web-dev-qa-db-ja.com

ワードプレスの認証はどのように機能しますか? 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;
}

これは私がwordpressで見つけたコードです。しかし、私は中でサーフィンしました、しかし、私はユーザ名またはパスワードがデータベースのために検索される場所を見つけることができません。パスワードとユーザー名を取得するためにwordpressでどのようなクエリが使用されているのかを知りたいだけです。

1
Prabah

これはあなたが探している行です:

$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関数が呼び出されます。

2
Otto