Не удается получить доступ к Wordpress Api с веб-сайта React

Я прихожу к вам в час великой нужды. Я потратил на это неделю и до сих пор не могу понять. Пожалуйста помоги.

Вот что я хочу сделать:

У меня есть веб-сайт WordPress (http://test/test.wp/), на котором вы можете сделать следующий вызов API прямо в браузере, когда вы вошли в систему:

$.ajax({
  url: 'http://test/test.wp/wp-json/wp/v2/users/me',
  method: 'GET',
  beforeSend: function(xhr){
    xhr.setRequestHeader( 'X-WP-Nonce', wpApiSettings.nonce );
  }
}).done(function(response){
  console.info(response);
}).fail(function(response){
  console.info( response.responseJSON.message );
});

И это работает просто отлично. Вы получаете Json о текущем пользователе (мне просто нужен идентификатор)

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

Сайты взаимосвязаны, и я как бы пытаюсь имитировать SSO между WordPress и React, просто захватывая идентификатор текущего пользователя, вошедшего в систему в WordPress, и используя его в поддомене реакции.

Чтобы добиться этого, я позаботился о CORS, поэтому я могу без проблем сделать запрос GET из React в WordPress. Я также поделился своим файлом cookie WordPress wordpress_logged_in_cffb670352ad40cd796ad890d27ee701 с поддоменом React, поэтому у меня есть доступ к нему (который, насколько я понимаю, является единственным файлом cookie, необходимым для вашей аутентификации)

Итак, после всего сказанного, почему мой запрос от React не работает?

    Axios({
    method: 'get',
    url: 'http://test/test.wp/wp-json/wp/v2/users/me',
    headers: {
        'X-WP-Nonce': '659cbfeec0', // <= It's needed to use the WP Api and it's correct. I mannually grabed it from WP with wpApiSettings.nonce

        withCredentials: true, // <= From what I understand is the only thing needed to send the `wordpress_logged_in_cffb670352ad40cd796ad890d27ee701`  cookie ???
    },
})
    .then(response => console.info(response))
    .catch(err => console.info(err));

Так почему же тогда я получаю ответ 403 (Запрещено)?:

    code: "rest_cookie_invalid_nonce"
data: {status: 403}
statusText: 'Forbidden'
message: "Cookie verification failed"

Вы можете сказать, что ответ содержится в ответе, который я получаю, но я действительно понятия не имею, почему это так.

Пожалуйста помоги.

Отчаянный кодер.

Я бы посоветовал вам проксировать ваш WordPress API, если вы используете КРА. Если вы правильно обработали CORS через прокси, вам следует сделать запрос с вашего базового URL-адреса сервера разработки. Вы также можете попробовать установить REST TTL менее 12 часов и посмотреть, как это происходит со стороны wp.

Sarthak Dwivedi 16.03.2022 12:01
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
0
1
23
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Я передавал «с учетными данными» в заголовках и из-за этого не отправлял файлы cookie в запросе.

Правильный способ сделать это:

Axios.get(
            'http://test/test.wp/wp-json/wp/v2/users/me',
            {
                withCredentials: true,
                headers: { 'X-WP-NONCE': 'Your_Nonce' },
            }
        )

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