web-dev-qa-db-ja.com

ログアウトするためのクッキーの削除

Javascriptを使用してwordpress_logged_in_47d1523b... cookieを削除した場合、潜在的な問題はありますか? wp_logoutがこれ以外に何かすることはありますか?

1
IAmJulianAcosta

現在のユーザーは wp_logout() function でログアウトできます。

私はそれがずっと良いアプローチだと思います。 wp_logout()は現在のセッションを破棄し、認証クッキーをクリアしてwp_logoutアクションを呼び出します。また、これはプラグイン可能な機能であり、プラグインによって再定義することができます。特に他のプラグインと組み合わせて作業するときは、重要なものを見逃すことがあります。

JavaScriptからログアウトしたい場合は、ajaxを使用してwp_logout()を実行できます(コードはテストされていません。基本的な例としてここに書かれています)

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

そして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

Wp_logoutに追加の何かがありますか?

私のコメントで述べたように、WordPressはwp_logoutに対して2つの関数を実行します。

  1. wp_destroy_current_session()
  2. wp_clear_auth_cookie()

wp_clear_auth_cookie()は、認証に関連するすべてのクッキーを削除します。これがJavaScriptでやりたいことです。

しかしwp_destroy_current_session()もあります。この関数はデータベースから現在のセッショントークンを削除します。これにより、次の質問に進みます。

Javascriptを使用してwordpress_logged_in_47d1523b ... cookieを削除した場合、問題が発生する可能性がありますか?

いいえ、ユーザーが手動でセッションとCookieを削除することはできますが、問題はありませんが、Webが破損することはありません。正しいセッションを削除している限り、すべては計画どおりに機能します。

今、あなたは疑問に思うかもしれません:データベースのセッショントークンはどうですか?セッションが破壊されるので、それはもう問題ではありません。ユーザーが再度ログインするとすぐに新しいトークンで上書きされます。


そして今度は悪いニュースです。JavaScriptだけでセッションを削除するのはどうですか?セッションキーと値は両方とも生成されるので、JavaScriptだけで正しいものをターゲットにすることはできません。セッションキーと値は、ユーザーごとおよびセッションごとに異なります。

2
N00b