Я прихожу к вам в час великой нужды. Я потратил на это неделю и до сих пор не могу понять. Пожалуйста помоги.
Вот что я хочу сделать:
У меня есть веб-сайт 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"
Вы можете сказать, что ответ содержится в ответе, который я получаю, но я действительно понятия не имею, почему это так.
Пожалуйста помоги.
Отчаянный кодер.
Я передавал «с учетными данными» в заголовках и из-за этого не отправлял файлы cookie в запросе.
Правильный способ сделать это:
Axios.get(
'http://test/test.wp/wp-json/wp/v2/users/me',
{
withCredentials: true,
headers: { 'X-WP-NONCE': 'Your_Nonce' },
}
)
Я бы посоветовал вам проксировать ваш WordPress API, если вы используете КРА. Если вы правильно обработали CORS через прокси, вам следует сделать запрос с вашего базового URL-адреса сервера разработки. Вы также можете попробовать установить REST TTL менее 12 часов и посмотреть, как это происходит со стороны wp.