WordPress API权限回调 - 检查用户是否已登录

时间:2017-11-23 12:37:24

标签: php wordpress

在使用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响应。

我在这里错过了什么,我做错了什么?

2 个答案:

答案 0 :(得分:0)

我最近遇到了同样的问题,但事实证明您需要创建一个nonce并将其与您的请求标头一起传递。

使用以下php代码创建适当的随机数。

$nonce = wp_create_nonce( 'wp_rest' );

然后通过标头X-WP-Nonce通过HTTP请求传递该nonce。

假设您的客户端位于同一个域(ergo已设置wordpress的auth Cookie),您的会话应该可以通过REST API访问,因此current_user_canis_user_logged_in等功能像在REST API之外那样工作。

答案 1 :(得分:0)

你可以使用current_user_can( 'edit_posts' );

它只允许与我一起工作的管理员用户

欲了解更多信息,请访问 https://developer.wordpress.org/reference/functions/current_user_can/