web-dev-qa-db-ja.com

他のデバイスにすでにログインしているユーザーを制限付きページからログアウトさせるにはどうすればよいですか。

誰かが私を助けることができると思います。私のクライアントと私はこのプロジェクトの準備ができていないので、この問題の解決策を見つけ出すことはできません。

私は現在WP Bouncerを使用して、ユーザーアカウントにログインしているデバイスの数を1つのデバイスに制限しています。私はGroupsプラグインを設定して、サイト上の特定のページも制限しています。

問題:WP Bouncerプラグインは、別のデバイスがログインすると、そのデバイスからユーザーをログオフさせます。ただし、ユーザーがログアウトされたことを確認するには、別のページに移動する必要があります。これは私のクライアントに問題を引き起こします。ユーザーがあるデバイスの制限付きページにアクセスすると、別のデバイスにログインして同じ制限付きページを表示できるため、両方のデバイスで同時にページを表示できます。ユーザーがログインしているかどうかを定期的に確認する方法はありますか?制限されたページにはビデオやデジタル雑誌が含まれているため、アイドル状態のユーザープラグインは使用したくありません。何かアドバイスは大歓迎です!

1
Christy

私はAJAXを使用してユーザーがログインしているかどうかを確認します。setIntervalを使用して30秒ごとに確認できます。

私は以下のコードをテストしました、そして、それは働きます。まず、テーマディレクトリにajax.jsというファイルを作成し、その中に次のコードを配置します。

(function ( $ ) {
    var check_user_is_logged_in = function(){
        $.ajax({
            type: 'POST',
            url: ajax_object.ajax_url,
            data: {action:'is_user_logged_in'},
            success:function(data) {
                if ( data == 'no' ) {
                    window.location.href = "http://mywebsite.com";
                }
            },
            error: function(errorThrown){
                console.log(errorThrown);
            }
        });
    };

    setInterval(function(){
        check_user_is_logged_in();
    }, 30000);
})( jQuery );

上記のコードで、 "mywebsite.com"を、ログアウトしたユーザーをリダイレクトしたいURLに変更します。 30000を調整することもできます。それはチェックの間に待つべきミリ秒数です。

次に、テーマのfunctions.phpファイルに次のコードを追加します。

function na_check_user_logged_in() {
    // Simply check if the user is logged in or not and echo 'yes' or 'no'
    echo ( is_user_logged_in() ) ? 'yes' : 'no';
    wp_die();
}

function na_enqueue_scripts(){
    // Enqueue our ajax.js script
    wp_enqueue_script( 'na_ajax_example', get_stylesheet_directory_uri().'/ajax.js', 'jquery');

    // Reveal the ajax_url for our script     
    wp_localize_script( 'na_ajax_example', 'ajax_object', array( 'ajax_url' => admin_url( 'admin-ajax.php' ) ) );
};

add_action( 'wp_ajax_is_user_logged_in', 'na_check_user_logged_in' );
add_action( 'wp_ajax_nopriv_is_user_logged_in', 'na_check_user_logged_in' );
add_action( 'wp_enqueue_scripts', 'na_enqueue_scripts' );

今のところ、このコードはすべてのページで実行されます。 na_enqueue_scripts関数を編集し、保護されたページにスクリプトをエンキューするだけのようにロジックを追加する必要があります。

0
Nate Allen