发生这种情况是因为您没有使用nonce。由于您没有提供请求的nonce,Wordpress将您视为未经授权/未登录的用户。这是因为wordpress无法知道/验证用户状态。
要使其正常工作,必须生成这样的nonce:
wp_create_nonce( \'wp_rest\' )
并将其提供给正在进行rest呼叫的应用程序。应用程序具有nonce值后,您可以将其添加到rest请求中,如下所示:
headers: {
\'X-WP-Nonce\': nonce,
}
完成此操作后,Wordpress将能够使用nonce正确验证用户,并且权限的条件检查将按预期工作。
编辑
根据您的评论,我想我会详细说明,因为这些信息可能对将来遇到这一问题的任何人都有用。
nonce定义为使用一次的数字。wordpress是如何使用它们的,以及为什么需要它们,如下所示:
"E;nonce是一个;“使用一次的编号”;帮助保护URL和表单免受某些类型的恶意或其他滥用。WordPress nonce不是数字,而是由数字和字母组成的散列。它们也不是只使用一次,而是有一个有限的;“寿命”;之后到期。在这段时间内,将为给定上下文中的给定用户生成相同的nonce。该操作的nonce对于该用户将保持不变,直到该nonce生命周期完成。
WordPress的安全令牌称为;“nonces”;尽管与真正的nonce存在上述差异,但它们的用途与nonce大致相同。它们有助于抵御包括CSRF在内的多种类型的攻击,但无法抵御重播攻击,因为它们未被检查为一次性使用。不应依赖nonce进行身份验证或授权、访问控制。使用current\\u user\\u can()保护您的函数,始终假定nonce可能会受到危害。
例如,为什么要使用nonce,管理屏幕可能会生成这样一个URL,它会丢弃帖子编号123"E;
TLDR是将nonce与rest请求中提供的用户身份验证cookie结合使用,就像任何服务器端请求一样。Nonces只是提供了一个额外的层,可以依赖它来确保用户是他们所说的那个人。它本身并不是身份验证的替代品。
有关全面的说明,请参阅https://codex.wordpress.org/WordPress_Nonces#:~:text=WordPress%20nonces%20aren\'t%20numbers,user%20in%20a%20given%20context.