WordPressでアカウントごとに最大同時ログイン数を制限したい
【問題】
WordPressでアカウントごとに最大同時ログイン数を制限したい
【解決方法】
function check_current_account_login_session( $user_login ){
$user = get_user_by( 'login', $user_login );
$userID = $user->data->ID;
$manager = '';
$manager = WP_Session_Tokens::get_instance( $userID );
$allSession = '';
$allSession = $manager->get_all();
// 最大同時ログイン数
$iAcceptableMaxSession = 3;
// ログインしようとしているアカウントの現在のログイン数
$iCurrentUserAllSession = count( $allSession );
if( $iAcceptableMaxSession < $iCurrentUserAllSession ){
add_filter( 'authenticate', 'set_authentication_error', 40, 1 );
}
}
add_action( 'wp_authenticate', 'check_current_account_login_session', 5, 1 );
function set_authentication_error(){
return new WP_Error( 'over_login_session_limit', '有効同時ログイン数が上限に達しています。' );
}
【備考】
一つのアカウントを複数人で使用されたくない場合、上記のコードをテーマフォルダ内のfunctions.phpにコピーすることで、アカウントの同時ログイン数を制限出来ます。
WordPressのログイン認証時に発動するwp_authenticateフックに、ログインしようとしているユーザーの現在のログインセッション数を取得する処理を追加しています。
もし、最大ログイン数をオーバーしていた場合、authenticateフックにWP_Errorオブジェクトを与えることで、ログインを失敗させています。