无法从 React 网站访问 Wordpress Api
Can't acces the Wordpress Api from a React website
我在非常需要的时候来找你。我已经花了一个星期的时间来解决这个问题,但仍然无法弄清楚。请帮忙。
这是我想要做的:
我有一个 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.log(response);
}).fail(function(response){
console.log( response.responseJSON.message );
});
而且效果很好。你得到一个关于当前用户的Json(我只需要ID)
现在,我得到了另一个用 React (http://app.test) 编写的网站(子域),我正在尝试向 WordPress 发出几乎相同的 GET 请求以获取当前登录用户的 ID。
这些站点是相互关联的,我试图通过简单地获取 WordPress 中当前登录用户的 ID 并在反应子域中使用它来模仿 WordPress 和 React 之间的 SSO
为了实现这一点,我已经处理了 CORS,因此我可以毫无问题地从 React 向 WordPress 发出 GET 请求。
我还与 React 子域共享了我的 WordPress wordpress_logged_in_cffb670352ad40cd796ad890d27ee701
cookie,因此我可以访问它(据我所知,这是让您进行身份验证所需的唯一 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.log(response))
.catch(err => console.log(err));
那么为什么我得到的答案是 403(禁止访问)?:
code: "rest_cookie_invalid_nonce"
data: {status: 403}
statusText: 'Forbidden'
message: "Cookie verification failed"
你可以说答案就在我收到的回复中,但我真的不知道为什么会这样。
请帮忙
绝望的编码员。
我在 Headers 中传递了 'with-Credentials',因此没有在请求中发送 cookie。
正确的做法是:
Axios.get(
'http://test/test.wp/wp-json/wp/v2/users/me',
{
withCredentials: true,
headers: { 'X-WP-NONCE': 'Your_Nonce' },
}
)
我在非常需要的时候来找你。我已经花了一个星期的时间来解决这个问题,但仍然无法弄清楚。请帮忙。
这是我想要做的:
我有一个 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.log(response);
}).fail(function(response){
console.log( response.responseJSON.message );
});
而且效果很好。你得到一个关于当前用户的Json(我只需要ID)
现在,我得到了另一个用 React (http://app.test) 编写的网站(子域),我正在尝试向 WordPress 发出几乎相同的 GET 请求以获取当前登录用户的 ID。
这些站点是相互关联的,我试图通过简单地获取 WordPress 中当前登录用户的 ID 并在反应子域中使用它来模仿 WordPress 和 React 之间的 SSO
为了实现这一点,我已经处理了 CORS,因此我可以毫无问题地从 React 向 WordPress 发出 GET 请求。
我还与 React 子域共享了我的 WordPress wordpress_logged_in_cffb670352ad40cd796ad890d27ee701
cookie,因此我可以访问它(据我所知,这是让您进行身份验证所需的唯一 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.log(response))
.catch(err => console.log(err));
那么为什么我得到的答案是 403(禁止访问)?:
code: "rest_cookie_invalid_nonce"
data: {status: 403}
statusText: 'Forbidden'
message: "Cookie verification failed"
你可以说答案就在我收到的回复中,但我真的不知道为什么会这样。
请帮忙
绝望的编码员。
我在 Headers 中传递了 'with-Credentials',因此没有在请求中发送 cookie。
正确的做法是:
Axios.get(
'http://test/test.wp/wp-json/wp/v2/users/me',
{
withCredentials: true,
headers: { 'X-WP-NONCE': 'Your_Nonce' },
}
)