web-dev-qa-db-fra.com

WP définir le cookie d'authentification à l'aide d'Ajax n'est pas enregistré dans le navigateur

Nous créons un tableau de bord externe qui utilise les données Wordpress. Nous utilisons évidemment WP REST API v2

Nous voulons une séparation totale du tableau de bord WP traditionnel, mais nous voulons également connecter l'utilisateur "en coulisse" à WP Tableau de bord d'administration, afin que nous puissions rediriger l'utilisateur vers plugin admin pages d'interface utilisateur; en raison de la limitation de la WP REST API

C’est ce que nous avons fait. Nous avons créé un plug-in personnalisé dont la fonction createAuthkey est décrite ci-dessous. L’utilisateur se connectant crée ensuite une clé (jeton).

La partie importante qui nous importe est que si la connexion réussit (wp_authenticate ()), nous voulons aussi sauvegarder le wp_auth_cookie sur le navigateur, donc même si l'utilisateur n'est pas connecté directement à/wp-admin, si le navigateur entre WP pages d'administration, nous voulons qu'elles soient connectées et nous utilisons donc wp_set_auth_cookie (), mais le AJAX response n'enregistre pas le cookie renvoyé dans le ressources du navigateur (mais le retourne correctement en réponse) et donc lorsque l'utilisateur est redirigé vers la page WP admin, ils sont déconnectés

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

Je suppose que votre tableau de bord personnalisé se trouve sur un domaine/sous-domaine différent de celui de l'installation de WordPress. Les cookies ne peuvent être configurés que pour le domaine actuel.

En règle générale, les cookies ne fonctionnent pas entre domaines. Votre tableau de bord ne peut donc pas créer de cookie pour le site Web WordPress. Théoriquement, il est possible de contourner certaines configurations de serveur, mais cette technique doit être prise en charge par le navigateur de l'utilisateur.

1
Philipp