Используйте Wordpress Nonce на Postman в качестве setRequestHeader, как в jQuery / Javascript - PullRequest
0 голосов
/ 27 марта 2020

Вот моя проблема.

На самом деле мне кажется, что я пытаюсь решить ошибку, а не решить проблему, и поэтому:

Я создаю плагин, который прекрасно работает в среде WordPress, и я ' Я использую одноразовый номер WordPress в качестве режима аутентификации.

Я использую jQuery / Ajax, чтобы передать одноразовый номер в заголовок, который я ранее создал с помощью PHP:

PHP :

wp_register_script('front-main', plugins_url('js/front-main.js' , __FILE__ ), '', '', true );
wp_enqueue_script('front-main');
wp_localize_script( 'front-main', 'wpApiSettings', array(
    'root' => esc_url_raw( rest_url() ),
    'nonce' => wp_create_nonce( 'wp_rest' )
) );

Javascript / jQuery:

$.ajax({

method: 'GET',
url: wpApiSettings.root+'top-list-route/my-top-list-get',
contentType: 'application/json; charset=utf-8',
beforeSend: function ( xhr ) {
    xhr.setRequestHeader( 'X-WP-Nonce', wpApiSettings.nonce );
},
dataType: 'json',
success: ajaxResponse

});

function ajaxResponse(data) {
    console.log(data)
}

Пока все хорошо, в двух словах, это приложение будет работать по тому же маршруту, который я ранее создал с помощью PHP :

public function my_register_route() {

   register_rest_route( 'top-list-route', 'my-top-list-get', array(
    array(
    'methods'  => WP_REST_Server::READABLE,
    'callback' => array($this, 'my_top_list_get'),
    'permission_callback' => function() {
       return current_user_can( 'edit_posts' );
     },
   ),

) );

Теперь, если я попытаюсь запустить тот же код с nonce (который я консолью .log в моем браузере) с Postman, кодом Visual Studio (с расширением клиента REST) ​​или просто в мой URL на chrome, он не будет работать, например:

POSTMAN:

GET http://netzstrategen.local/wp-json/top-list-route/my-top-list-get
(IN THE HEADERS section) X-WP-Nonce (key) 47489127d8 (value, for example)

вернет:

{
    "code": "rest_cookie_invalid_nonce",
    "message": "Cookie nonce is invalid",
    "data": {
        "status": 403
    }
}

или если я использую Например, этот URL:

http://netzstrategen.local/wp-json/top-list-route/my-top-list-get?_wpnonce=47489127d8

будет возвращать тот же статус (403 rest_cookie_invalid_nonce).

Та же проблема с кодом Visual Studio, если я добавлю какой-либо заголовок в свой запрос GET, например:

GET http://netzstrategen.local/wp-json/top-list-route/my-top-list-get?_wpnonce=47489127d8

вернет:

HTTP/1.1 403 Forbidden

{
  "code": "rest_cookie_invalid_nonce",
  "message": "Cookie nonce is invalid",
  "data": {
    "status": 403
  }
}

Любая подсказка?

...