我在上安装了一个无头Wordpressv5.4.0
. 前端无法获取中的任何帖子draft
状态,但当直接访问API url时,返回的数据没有问题。我假设这与cookie/auth有关。注意,我动态地抓取nonce
来自后端的值,此处显示完整字符串以供参数使用。以下是我的设置和回复截图:
请求URL:http://wordpress.test/wp-json/wp/v2/pages/19060?wpnonce=23c01b3b12&_embed=true
使用在前端调用isomorphic-unfetch
(也尝试了axios
) 像这样:
fetch("http://wordpress.test/wp-json/wp/v2/pages/19060?wpnonce=23c01b3b12&_embed=true", {
credentials: "include"
})
这是来自前端的请求/响应,它不起作用(这对所有人都起作用
published
内容):
使用此正文:
{
"code":"rest_forbidden",
"message":"Sorry, you are not allowed to do that.",
"data":{
"status":401
}
}
在尝试直接访问数据时,根据
wpnonce
查询参数下划线:
这起作用(使用_wpnonce
) 返回正确的JSON数据:
http://wordpress.test/wp-json/wp/v2/pages/19060?_wpnonce=23c01b3b12&_embed=true
详细信息:
这不会(使用wpnonce
):
http://wordpress.test/wp-json/wp/v2/pages/19060?wpnonce=23c01b3b12&_embed=true
详细信息:
返回与前端相同的响应错误:
{
"code":"rest_forbidden",
"message":"Sorry, you are not allowed to do that.",
"data":{
"status":401
}
}
EDIT:
我也试过
X-WP-Nonce
此处提到的标题(
https://developer.wordpress.org/rest-api/using-the-rest-api/authentication/) 而且似乎没有被认识到:
fetch(postUrl, {
credentials: "include",
headers: {
"X-WP-Nonce": wpnonce
}
})
{"code":"rest_cookie_invalid_nonce","message":"Cookie nonce is invalid","data":{"status":403}}
EDIT 2:
在一个干净的WP安装和一个新的裸体前端(html+jquery)上,我看到了同样的问题。但是,我发现nonce在生成预览链接时有效,但在WP尝试使用验证时无效
rest_cookie_check_errors
. 同一个nonce怎么能用同一个动作(
wp_rest
) 验证失败?:
我看到了wp_get_session_token()
失败,因为在REST请求上找不到cookie。(https://core.trac.wordpress.org/browser/tags/5.4/src/wp-includes/pluggable.php#L2140) 这不是nonce
不需要Cookie?跨域cookie路径是否存在问题?
我正在XHR中发送凭据。以下是我的前端测试代码:
// GET page with Nonce header
$.ajax({
url: postUrl,
method: "GET",
xhrFields: {
withCredentials: true
},
beforeSend: function(xhr) {
xhr.setRequestHeader("X-WP-Nonce", wpnonce);
xhr.setRequestHeader("Content-Type", "application/json");
}
})
两个问题:
主要是,如何使用前端的nonce值获取草稿帖子数据世界上为什么_wpnonce
/ wpnonce
查询变量在前端和后端显示不同的结果