在使用WP Rest API时,我对权限回调有疑问。我使用register_rest_route注册了几个端点,只是想保护它们,以便在您没有登录时无法访问内容。
add_action('rest_api_init', 'register_custom_endpoints');
function register_custom_endpoints(){
register_rest_route($base, $endpoint, [
'methods' => 'POST',
'callback' => function($request){
// Return JSON data
},
'permission_callback' => function($request){
// This always returns false
return is_user_logged_in();
},
]);
}
我认为我的逻辑是正确的,但is_user_logged_in()
总是返回false,这意味着即使我实际登录,我也永远不会得到数据。我得到的只是404响应:
{code: "rest_user_invalid_id", message: "Invalid user ID.", data: {status: 404}}
我一直在网上搜索答案,我发现我需要发送一个带有请求的随机数。我已经尝试将它作为正文数据和标题发送。如果我将它发送到正文中,我无法验证它,因为它总是返回false。如果我将其作为标题发送,我会得到与上述相同的404响应。
我在这里错过了什么,我做错了什么?
答案 0 :(得分:0)
我最近遇到了同样的问题,但事实证明您需要创建一个nonce并将其与您的请求标头一起传递。
使用以下php代码创建适当的随机数。
$nonce = wp_create_nonce( 'wp_rest' );
然后通过标头X-WP-Nonce
通过HTTP请求传递该nonce。
假设您的客户端位于同一个域(ergo已设置wordpress的auth Cookie),您的会话应该可以通过REST API访问,因此current_user_can
和is_user_logged_in
等功能像在REST API之外那样工作。
答案 1 :(得分:0)
你可以使用current_user_can( 'edit_posts' );
它只允许与我一起工作的管理员用户
欲了解更多信息,请访问 https://developer.wordpress.org/reference/functions/current_user_can/