web-dev-qa-db-ja.com

Ajaxを使用してWP認証Cookieを設定してもブラウザに保存されない

Wordpressのデータを使用する外部ダッシュボードを作成しています。明らかに、 WP REST API v2 を使用します。

従来のWPダッシュボードから完全に切り離したいのですが、WP Admin Dashboardに「裏から」ユーザーをログインしたいので、ユーザーを一部のユーザーにリダイレクトできます。プラグイン管理UIページ。 WP REST APIの制限により

これが私たちがしたことです、私たちはその下にcreateAuthkeyという機能を持つカスタムプラグインを作成しました。それはログインユーザがそれからキー(トークン)を作成します。

私たちが気にしている重要な部分は、ログインが成功した場合(wp_authenticate())、ブラウザ上でwp_auth_cookieも保存したいので、ユーザーが/ wp-adminに直接ログインしていなくてもブラウザがWP管理ページに入ったら、それらをログインさせたいので、wp_set_auth_cookie()を使用しますが、AJAX応答は使用しません。返されたcookieをブラウザのリソースに保存します(ただし、応答として正しく返します)。したがって、ユーザーがWP管理ページにリダイレクトされると、ログアウトされます。

function createAuthKey( WP_REST_Request $request )
{
    // Get login information
    $username   = $request->get_param( 'username' );
    $password   = $request->get_param( 'password' );

    $user = wp_authenticate( $username, $password );

    if ( is_wp_error( $user ) ) {
     return false;
    }

    $converter = new Encryption;
    $encoded = $converter->encode($username . ":" . $password);

    // Set Cookie: NOT SAVED TO BROWSER!!!
    wp_set_auth_cookie($user->ID, true);

    return ['key' => $encoded, 'cookie' => $_COOKIE];
}
4
Nizar Blond

私はあなたのカスタムダッシュボードがWordPressのインストールとは異なるドメイン/サブドメインにあると思います。 Cookieは現在のドメインに対してのみ設定できます。

通常、クッキーはクロスドメインでは機能しません。だからあなたのダッシュボードはWordPressウェブサイト用のクッキーを作成することができません。理論的には、いくつかのサーバー構成で迂回することは可能ですが、この手法はユーザーのブラウザでサポートされなければなりません。

1
Philipp