web-dev-qa-db-fra.com

Comment déconnecter les utilisateurs d'une page restreinte s'ils sont déjà connectés à un autre appareil?

J'espère que quelqu'un pourra m'aider. Mon client et moi sommes au contact de ce projet et je n'arrive pas à trouver une solution à ce problème.

J'utilise actuellement WP Bouncer pour limiter le nombre de périphériques connectés à un compte d'utilisateur sur un seul périphérique. J'ai la configuration du plug-in Groupes pour restreindre également certaines pages du site.

Le problème: le plug-in WP Bouncer déconnecte un utilisateur d'un périphérique lorsqu'un autre périphérique se connecte. Toutefois, l'utilisateur doit accéder à une autre page pour voir qu'il a été déconnecté. Cela crée un problème pour mon client. Une fois qu'un utilisateur est sur une page restreinte sur un périphérique, il peut se connecter sur un autre périphérique et afficher la même page restreinte, permettant ainsi aux deux périphériques de visualiser la page à la fois. Est-il possible de vérifier périodiquement si un utilisateur est connecté? Je ne souhaite utiliser aucun plug-in utilisateur inactif, car les pages restreintes incluent des vidéos et des magazines numériques. Tout avis sera le bienvenu!

1
Christy

J'utiliserais AJAX pour vérifier si l'utilisateur est connecté. Vous pouvez utiliser setInterval pour vérifier toutes les 30 secondes (ou peu importe).

J'ai testé le code suivant, et cela fonctionne. Commencez par créer un fichier dans votre répertoire de thème appelé ajax.js et placez-y ce code:

(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 );

Dans le code ci-dessus, remplacez "mywebsite.com" par l'URL vers laquelle vous souhaitez rediriger les utilisateurs déconnectés. Vous pouvez également ajuster 30000. C'est le nombre de millisecondes qu'il devrait attendre entre les vérifications.

Ensuite, dans le fichier functions.php de votre thème, ajoutez ce code:

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' );

En ce moment, ce code sera exécuté sur toutes les pages. Vous devrez éditer la fonction na_enqueue_scripts et ajouter une logique afin de ne mettre en file d'attente le script que sur les pages protégées.

0
Nate Allen