Странные 401 и 403 с WordPress REST API (wp-json)

Я злюсь, потому что, будучи администратором WordPress, на внешнем интерфейсе (не на портале администратора) я не могу делать запросы на публикацию / размещение. Простой запрос GET AJAX отлично работает без каких-либо учетных данных:

   axios.get(this.page.url + "/wp-json/wp/v2/posts").then((resp) => {
      console.info(resp.data);
    });

НО, когда я пытаюсь сделать почтовые запросы, я всегда получаю ошибку 401, если я не включаю одноразовый номер. Если я включаю одноразовый номер, я получаю 403. Пробовал как с AXIOS, так и с JQUERY:




// Axios:
axios.defaults.withCredentials = true;
    axios.defaults.headers.post["X-WP-Nonce"] = MYSCRIPT.nonce; // for POST request

    axios
      .post(this.page.url + "/wp-json/wp/v2/posts", {
        title: "title",
        content: "content",
        status: "publish",
      })
      .then(function (response) {
        console.info(response);
      })
      .catch(function (error) {
        console.info(error);
      });

// JQUERY
$.ajax({
      url: this.page.url + "/wp-json/wp/v2/posts",
      type: "post",
      data: {
        title: "title",
        content: "content",
        status: "publish",
      },
      headers: {
        "X-WP-Nonce": MYSCRIPT.nonce, //If your header name has spaces or any other char not appropriate
      },
      dataType: "json",
      success: function (data) {
        console.info(data);
      },
    });

Nonce просто генерируется с помощью:

    <script>
        <?php echo 'const MYSCRIPT = ' . json_encode(
            array('nonce' => wp_create_nonce('wp-rest'))
        ); ?>
    </script>

Я знаю, что это не очень хорошая практика, и я включу ее должным образом, как только заставлю ее работать. Nonce отлично извлекается Javascript, но я получаю 403 от wordpress... Не знаю, как поступить!

Как убрать количество товаров в категории WooCommerce
Как убрать количество товаров в категории WooCommerce
По умолчанию WooCommerce показывает количество товаров рядом с категорией, как показано ниже.
0
0
134
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Действие, указанное в wp_create_nonce, должно быть wp_rest (подчеркивание), а не wp-rest (дефис).

https://developer.wordpress.org/rest-api/using-the-rest-api/authentication/

Для разработчиков, выполняющих Ajax-запросы вручную, одноразовый номер необходимо будет передавать с каждым запросом. API использует одноразовые номера с установленным действием wp_rest.

Замените wp-rest на wp_rest, и все должно работать правильно.

Вау, спасибо, приятель, теперь работает как шарм ... Я чувствую себя очень глупо!

Mauro 05.01.2023 14:44

@Мауро, нет проблем, все делают ошибки. Не стесняйтесь принять мой ответ, если считаете, что он был полезен.

A. Darwin 05.01.2023 14:46

Другие вопросы по теме