可以';t使用WP REST API 2.0插件通过基本身份验证进行身份验证


Can't authenticate with basic authentication using WP REST API 2.0 plugin

我的基本身份验证有问题。

尝试使用Postman(chrome插件)使用以下url发送GET请求:http://_MY_WEBSITE_URL_/wp-json/wp/v2/users/3

用户名和密码字段填充有站点的管理员用户凭据。

我得到的错误:

{
    "code": "rest_user_cannot_view",
    "message": "Sorry, you cannot view this resource.",
    "data": {
        "status": 401
    }
}

我使用另一个网站的wp_remote_request和CURL尝试了基本的身份验证,但每次的结果都是一样的。

id为3的用户存在,我已经检查过了。如果我想列出所有用户,我只会得到那些已经创建帖子的用户。

我已经激活了所需的插件:WP REST APIJSON基本身份验证

我的wordpress版本:4.4.2

最后,我找到了解决方案。我不得不手动添加一些新选项到我的.htaccess文件中,插件没有成功。

代码:

# BEGIN WP BASIC Auth
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /PluginTest/
RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule ^(.*) - [E=HTTP_AUTHORIZATION:%1]
</IfModule>
# END WP BASIC Auth

我认为问题不在于从服务器获取用户数据,而在于您的身份验证问题具有此用户功能或角色可能不是管理员

用于详细视图

wp-content/plugins/rest-api/lib/endpoints/class-wp-rest-users-controller.php

public function get_item_permissions_check( $request ) {
    $id = (int) $request['id'];
    $user = get_userdata( $id );
    $types = get_post_types( array( 'public' => true ), 'names' );
    if ( empty( $id ) || empty( $user->ID ) ) {
        return new WP_Error( 'rest_user_invalid_id', __( 'Invalid resource id.' ), array( 'status' => 404 ) );
    }
    if ( get_current_user_id() === $id ) {
        return true;
    }
    if ( 'edit' === $request['context'] && ! current_user_can( 'list_users' ) ) {
        return new WP_Error( 'rest_user_cannot_view', __( 'Sorry, you cannot view this resource with edit context.' ), array( 'status' => rest_authorization_required_code() ) );
    } else if ( ! count_user_posts( $id, $types ) && ! current_user_can( 'edit_user', $id ) && ! current_user_can( 'list_users' ) ) {
        return new WP_Error( 'rest_user_cannot_view', __( 'Sorry, you cannot view this resource.' ), array( 'status' => rest_authorization_required_code() ) );
    }
    return true;
}

对于所有面临这些错误的人,在激活JWT后,删除标头中的基本身份验证授权,并在任何情况下(获取和发布)发送customer_key和customer_secret作为查询参数。这可能看起来很奇怪和不安全,但对我来说很有效。