web-dev-qa-db-fra.com

WP REST API: vérifier si l'utilisateur est connecté)

L'idée est d'afficher ou de masquer certaines sections du site dans un thème qui récupère toutes les données de l'API REST, à l'aide d'AngularJS.

Je pensais que cette vérification m'aiderait (le nonce est passé comme en-tête, comme suggéré par les documents):

wp_localize_script('angularjs', 'params', array(
    'nonce' => wp_create_nonce('wp_rest'),
    'nonce_verify' => wp_verify_nonce($_REQUEST['X-WP-Nonce'], 'wp_rest')
));

Le paramètre nonce fonctionne et je peux le passer comme en-tête de demande via AngularJS, en enregistrant avec succès. Mais le nonce_verify n'a pas fonctionné comme prévu.

Donc, la question: existe-t-il un moyen de vérifier si un utilisateur est connecté lors de l'utilisation de l'authentification par cookie? Je vous remercie.

EDIT: J'ai localisé la valeur de nonce car j'avais besoin de l'obtenir dans ce morceau de code angularJS. C'est là que l'auth se produit:

$httpProvider.interceptors.Push(function () {
            return {
                'request' : function (config) {
                    config.headers = config.headers || {};

                    config.headers['X-WP-Nonce'] = params.nonce;

                    return config;
                }
            }
        });
1
Daniele Squalo

Vous ne devez pas transmettre votre nonce à votre JavaScript pour le vérifier, car les scripts côté client peuvent être facilement manipulés. Au lieu de cela, vous devez obtenir le nonce de votre contenu frontal, puis le transmettre au serveur pour le vérifier.

Après vérification, vous devez décider de sortir le contenu par serveur, pas par votre fichier JavaScript.

Quelque chose comme ça:

if ( is_user_logged_in() ) {
    if ( wp_verify_nonce($_REQUEST['X-WP-Nonce'], 'wp_rest') {
        // Nonce is correct!
    } else {
        // Don't send the data, it's a trap!
    }
}

En guise de remarque, REST propose sa propre méthode pour récupérer les requêtes passées. Ainsi, vous pouvez l'obtenir de cette façon dans votre fonction de rappel:

function foobar( \WP_REST_Request $request ) {
    $nonce = $request['X-WP-Nonce'];
}
3
Jack Johansson