十多年来我第一次使用WordPress。。。使用木材进行MVC。Vue位于前端,axios用于ajax帖子。都托管在同一个域上,因此我可以使用cookie进行身份验证。
我正在使用axios,并将nonce设置为本地变量,我在Vue中提取该变量,并在通过axios发布时使用该变量设置标题。
我注册了许多自定义API路由,例如:
add_action( \'rest_api_init\', function () {
register_rest_route( \'rw-user/v1\', \'/log-in\', array(
\'methods\' => \'POST\',
\'callback\' => \'ajax_login\',
));
register_rest_route(\'rw-user/v1\',\'/log-out\', array(
\'methods\' => \'POST\',
"callback" => \'ajax_logout\'
));
// .... truncated ....
});
我很困惑,因为我可以在有无停顿的情况下达到这些终点(因为我是英国人,所以我觉得很有趣)。如果我传递nonce头,它将检查nonce并在确定时运行函数,如果不确定则拒绝。如果我don\'t 传递nonce头,它不会检查nonce,但仍会运行函数。。。
我在文档中读到:
https://developer.wordpress.org/rest-api/using-the-rest-api/authentication/
“参考资料”;请注意,无需验证nonce在自定义端点内是否有效。这将在“中自动为您完成”因此,如果端点已经在进行验证,那么如果不存在nonce,它肯定会失败吗?
这是否意味着rest端点不会自动检查nonce的有效性,我应该自己检查函数中的有效性?
此外,一些页面大量使用AJAX与这些自定义端点进行交互。对于每个AJAX请求,nonce都会变得无效,从而中断将来的AJAX请求(我使用POST)。
我假设我需要在接收AJAX请求的函数中生成一个新的nonce,并将这个新的nonce返回到浏览器,以便我可以将新的nonce发布到下一个AJAX请求的头部。
$new_nonce = wp_create_nonce( \'new_nonce\' );
wp_send_json_success(array(\'nonce\'=>$new_nonce ));
我可以在控制台中看到返回的新nonce。。。我在下一个请求中使用它来更新标头,但是nonce失败了,尽管它是新的?如果您能就如何正确使用NONCES给出任何建议,我们将不胜感激。谢谢