Rückruf der WordPress-API-Berechtigung – Überprüfen Sie, ob der Benutzer angemeldet ist

Lesezeit: 2 Minuten

Ich habe eine Frage zu Berechtigungsrückrufen bei der Arbeit mit der WP Rest API. Ich habe ein paar Endpunkte mit register_rest_route registriert und möchte sie einfach sichern, damit Sie nicht auf den Inhalt zugreifen können, wenn Sie nicht angemeldet sind.

add_action('rest_api_init', 'register_custom_endpoints');

function register_custom_endpoints(){
    register_rest_route($base, $endpoint, [
        'methods' => 'POST',
        'callback' => function($request){
            // Return JSON data
        },
        'permission_callback' => function($request){
            // This always returns false
            return is_user_logged_in();
        },
    ]);
}

Ich denke, meine Logik hier ist richtig, aber is_user_logged_in() gibt immer false zurück, was bedeutet, dass ich die Daten nie bekomme, selbst wenn ich tatsächlich angemeldet bin. Alles, was ich bekomme, ist eine 404-Antwort:

{code: "rest_user_invalid_id", message: "Invalid user ID.", data: {status: 404}}

Ich habe das Internet nach Antworten durchsucht und festgestellt, dass ich eine Nonce mit der Anfrage senden muss. Ich habe versucht, es sowohl als Körperdaten als auch als Kopfzeile zu senden. Wenn ich es im Körper sende, kann ich es nicht überprüfen, da es immer falsch zurückgibt. Und wenn ich es als Header sende, bekomme ich die gleiche 404-Antwort wie oben angegeben.

Was übersehe ich hier und was mache ich falsch?

  • Wenn Sie eingeloggt sagen, meinen Sie Auth-Header?

    – ProEvilz

    23. November 2017 um 12:40 Uhr

  • Weil … wie erwarten Sie, angemeldet zu sein, wenn Sie die API verwenden

    – ProEvilz

    23. November 2017 um 12:40 Uhr

  • Laut der WordPress-API-Dokumentation sollte ich in der Lage sein, den aktuellen Benutzer in meinem Berechtigungsrückruf zu überprüfen. v2.wp-api.org/extending/adding

    – Aktengrube

    23. November 2017 um 12:43 Uhr


Benutzer-Avatar
Moros Smith

Ich bin kürzlich auf dasselbe Problem gestoßen, und es stellt sich heraus, dass Sie eine Nonce erstellen und diese mit Ihren Anforderungsheadern übergeben müssen.

Die entsprechende Nonce erstellen Sie mit folgendem PHP-Code.

$nonce = wp_create_nonce( 'wp_rest' );

Dann übergeben Sie diese Nonce mit dem HTTP-Request über den Header X-WP-Nonce.

Angenommen, Ihr Client befindet sich in derselben Domäne (also hat WordPress die Authentifizierungscookies gesetzt), sollte Ihre Sitzung über die REST-API zugänglich sein, damit sie funktioniert wie current_user_can und is_user_logged_in funktionieren wie außerhalb der REST-API.

  • Was ist, wenn es sich nicht in derselben Domäne befindet?

    – Orkhan Farmanli

    25. September 2019 um 8:02 Uhr

  • Ihre Antwort wäre nützlicher, wenn Sie ein vollständiges Beispiel geben würden

    – Uria Victor

    19. November 2020 um 5:00 Uhr

Sie können verwenden current_user_can( 'edit_posts' );

Es erlaubt nur dem Administrator, dass es mit mir funktioniert

Weitere Informationen finden Sie unter
https://developer.wordpress.org/reference/functions/current_user_can/

1370900cookie-checkRückruf der WordPress-API-Berechtigung – Überprüfen Sie, ob der Benutzer angemeldet ist

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy