web-dev-qa-db-fra.com

Wordpress REST API - Rappels d'autorisation

Je suis en train de construire une petite API REST avec le plug-in WP-REST v2. Tout fonctionne parfaitement, cependant, dans la documentation, il existe des rappels d'autorisation, qui limitent l'accès à certains groupes d'utilisateurs (exactement ce que j'essaie de faire). La syntaxe fournie est la suivante:

'permission_callback' => function () {
    return current_user_can( 'edit_others_posts' );
}

Le problème que je rencontre est qu'au moment de l'exécution, l'utilisateur actuel est vide, bien qu'il soit connecté et authentifié en tant que compte administratif (des jetons de session existent dans les cookies avant, pendant et après la demande). J'ai pensé que c'était peut-être parce que le point de terminaison de la route renvoyait une page contenant uniquement le texte de la réponse. J'ai donc essayé d'appeler l'API à partir de index.php et wp_get_current_user(); rend un objet utilisateur vide. Par conséquent, current_user_can('condition') ne réussira jamais.

Merci pour toute aide!

6
connorb

Le problème était dû au fait que je ne générais ni n'envoyais une valeur nonce avec la demande. Afin de générer une valeur nonce. Localisez la valeur d'un appel de fonction wp_create_nonce('wp_rest').

wp_localize_script('application', 'api', array(
    'root' => esc_url_raw(rest_url()),
    'nonce' => wp_create_nonce('wp_rest')
));

Ceci sera alors accessible à l'objet window du navigateur auquel on peut accéder via Javascript, cette nonce devrait alors être passée comme valeur de l'en-tête de requête X-WP-Nonce lors de l'exécution de requêtes XHR/HTTP. Voici un exemple:

var request = new XMLHttpRequest();

request.addEventListener('load', function() {
    console.log(this.responseText);
}

request.open('GET', api.root + 'mynamespace/posts');

// You must set headers after the request has been opened and before itself.
request.setRequestHeader('X-WP-Nonce`, api.nonce);

request.send(); // will fire the event listener above when fulfilled.

J'espère que cela a été utile.

9
connorb