web-dev-qa-db-fra.com

Supprimer le cookie pour vous déconnecter

Y aurait-il des problèmes potentiels si je supprime le cookie wordpress_logged_in_47d1523b... à l'aide de javascript? Y at-il quelque chose de plus que wp_logout fait?

1
IAmJulianAcosta

Vous pouvez déconnecter l'utilisateur actuel avec wp_logout() function :

Je pense que c'est une bien meilleure approche. wp_logout() détruit la session en cours, efface le cookie d'autorisation et appelle l'action wp_logout. En outre, il s’agit d’une fonction connectable, ce qui signifie qu’elle peut être redéfinie par des plugins. Vous pouvez rater des choses importantes, spécialement lorsque vous travaillez avec d'autres plugins.

Si vous souhaitez vous déconnecter de JavaScript, vous pouvez exécuter wp_logout() en utilisant ajax (code non testé, simplement écrit ici à titre d'exemple):

add_action( 'wp_enqueue_scripts', 'cyb_enqueue_scripts' );
function cyb_enqueue_scripts() 
    wp_enqueue_script( 'cyb-ajax-logout', 'url_to_js_script', array( 'jquery' ) );
    wp_localize_script( 'cyb-ajax-logout', 'ajax_logout_params',
        array(
            'ajax_url'     => admin_url( 'admin-ajax.php' ),
            'logout_nonce' => wp_create_nonce( 'cyb-logout-nonce' ),
        )
    );
}

add_action('wp_ajax_cyb_logout', 'cyb_ajax_logout');
function cyb_ajax_logout(){
    if( check_ajax_referer( 'cyb-logout-nonce', 'logout_nonce', false ) ) {
        wp_logout();
        $reponse = array(
            'message' => __( 'You have been logged out.', 'cyb-textdomain' )
        );
        wp_send_json_success( $reponse );
    } else {
        // Ajax referer is wrong
        $reponse = array(
            'message' => __( "Unknown referer. You couldn't been logged out.", 'cyb-textdomain' )
        );
        wp_send_json_error( $reponse );
    }
}

Et le js:

jQuery(document).ready(function($){
    var data = {
        action: 'cyb_logout',
        logout_nonce: ajax_logout_params.logout_nonce
    };
    $.getJSON( ajax_logout_params.ajax_url, data, function( response ) {
        if( response.success ) {
            // User has been logged out
        }
    });
});
1
cybmeta

Y a-t-il quelque chose de plus que wp_logout?

Comme je l'ai dit dans mon commentaire, WordPress exécute deux fonctions sur wp_logout.

  1. wp_destroy_current_session()
  2. wp_clear_auth_cookie()

wp_clear_auth_cookie() supprime tous les cookies associés à l'authentification. C'est ce que vous voudriez faire avec JavaScript.

Cependant, il y a aussi wp_destroy_current_session(). Cette fonction supprime le jeton de session en cours de la base de données, ce qui nous amène à la question suivante.

Cela poserait-il des problèmes potentiels si je supprimais wordpress_logged_in_47d1523b ... cookie à l'aide de javascript?

Non, il ne devrait y avoir aucun problème, car les utilisateurs peuvent supprimer manuellement les sessions et les cookies, mais cela ne rompt pas avec le Web. Tant que vous supprimez la bonne session, tout fonctionne comme prévu.

Maintenant, vous vous demandez peut-être: qu’en est-il du jeton de session dans la base de données? Cela n'a plus d'importance car la session est détruite. Il sera remplacé par un nouveau jeton dès que l'utilisateur se connectera à nouveau.


Et maintenant la mauvaise nouvelle: Comment allez-vous supprimer la session avec uniquement du JavaScript? La clé de session et la valeur sont toutes les deux générées. Vous n'avez aucun moyen de cibler la bonne avec JavaScript uniquement. La clé et la valeur de session sont différentes pour chaque utilisateur et pour chaque session.

2
N00b