web-dev-qa-db-ja.com

ログイン後にユーザーIDを取得する

ログイン後にCookieが設定されている場合にのみユーザーが自分のプロファイルにアクセスでき、最大3つのCookieしか設定できないようなサイトに、一種の安全メカニズムを追加するよう求められました。私はデータベースにクッキーを保存するためのテーブルを作成したので、それらをカウントすることができます。

WordPressがどのように機能するのかはよくわかりませんが、テーマのfunctions.phpファイルを編集してwp_loginを使用してアクションを追加する必要があることがわかりました。私はfunctions.phpファイルを編集し、アクションを追加し、ユーザーIDを要求しました、そしてそれは0を返します。私はこれがwp_get_current_userがどのように機能することになっているかを知っています、誰もログインしていなければ0を返します。しかし、ユーザISはログインしましたが、それでもIDを返しません。これがコードです:

add_action( 'wp_login', 'login_cookie' );
function login_cookie() {
    global $wpdb;
    $user = wp_get_current_user();
    //Get current user
    $id = $user->ID;

    if(!isset($_COOKIE['userCookie'])) {
        // Query the database to see how many cookies they have used
        $cookie_count = $wpdb->get_var("SELECT COUNT(*) FROM wp_cookies WHERE user_id=".$id."");
        // If the returned value is bigger or equal to 3 than the user cannot login
        // they will be logged out, and redirected
        if($cookie_count >= 3) {
            wp_logout();   
            wp_redirect("");                
        }
        //Else they can login and they recieve a new cookie, which will get inserted into the database 
        else {
            $value = password_hash($id,PASSWORD_DEFAULT);
            setcookie('userCookie', $value, time()+360000*24*100, "", "",false);
            $wpdb->insert(
                "wp_cookies",
                [ 'user_id'=>$id, 'cookie_value'=>$value ],
                [ '%d', '%s' ]
            );
        }
    }
}

また、これは管理者ではなく通常のユーザーにのみ影響するはずです。そのためのアイデアはありますか?

2
user2941726

wp_loginフックは、$user->user_login(文字列)と$user(WP_User)の2つのパラメータへのアクセスを提供します。それらをあなたの関数に渡すには、優先度(デフォルトは10)を追加し、add_action()呼び出しから2つの引数を要求する必要があります。

function login_cookie($user_login, $user) {
    global $wpdb;

    var_dump($user); // get WP_User object

    //Get current user ID
    $id = $user->ID;
    .....
}

add_action( 'wp_login', 'login_cookie', 10, 2 );
5
Jayson

実際にはwp_loginフックはそのパラメータでユーザオブジェクトを渡しています。

function login_cookie( $user_login, $user ) {
    $user_id = $user->ID; // get user id
    // your next code
}
add_action( 'wp_login', 'login_cookie', 10, 2 );
2
Emetrop