it-swarm.com.de

Wordpress REST API - Berechtigungsrückrufe

Ich erstelle gerade eine kleine REST API mit dem WP-REST v2 Plugin. Alles funktioniert einwandfrei, aber in der Dokumentation gibt es Berechtigungsrückrufe, die den Zugriff auf bestimmte Benutzergruppen einschränken (genau das, was ich versuche). Die Syntax lautet wie folgt:

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

Das Problem, das ich habe, ist, dass der aktuelle Benutzer zum Zeitpunkt der Ausführung leer ist, obwohl er angemeldet und als Administratorkonto authentifiziert ist (Sitzungstoken sind in den Cookies vor, während und nach der Anforderung vorhanden). Ich vermutete, dass dies daran liegen könnte, dass der Routenendpunkt nur eine Seite mit dem Antworttext zurückgibt. Daher habe ich versucht, die API über die Datei index.php aufzurufen, und wp_get_current_user(); gibt ein leeres Benutzerobjekt zurück, sodass current_user_can('condition') niemals erfolgreich sein wird.

Danke für jede Hilfe!

6
connorb

Das Problem bestand darin, dass ich mit der Anforderung keinen nonce-Wert generiert und gesendet habe. Um einen nonce Wert zu generieren. Lokalisieren Sie den Wert eines Funktionsaufrufs wp_create_nonce('wp_rest').

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

Dies ist dann für das Objekt window des Browsers zugänglich, auf das über Javascript zugegriffen werden kann. Diese nonce sollte dann bei der Ausführung von XHR/HTTP-Anforderungen als Wert des Request-Headers X-WP-Nonce übergeben werden. Ein Beispiel dafür ist wie folgt:

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.

Ich hoffe das war hilfreich.

9
connorb