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

Php Can';t使用WP REST API 2.0插件通过基本身份验证进行身份验证,php,wordpress,rest,authentication,wordpress-rest-api,Php,Wordpress,Rest,Authentication,Wordpress Rest Api,我对基本身份验证有问题 正在尝试使用以下url使用Postman(chrome插件)发送GET请求: 用户名和密码字段由站点的管理员用户凭据填充 我得到的错误是: { "code": "rest_user_cannot_view", "message": "Sorry, you cannot view this resource.", "data": { "status": 401 } } 我从另一个网站使用wp_remote_请求尝试了基本的

我对基本身份验证有问题

正在尝试使用以下url使用Postman(chrome插件)发送GET请求:

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

我得到的错误是:

{
    "code": "rest_user_cannot_view",
    "message": "Sorry, you cannot view this resource.",
    "data": {
        "status": 401
    }
}
我从另一个网站使用wp_remote_请求尝试了基本的身份验证,也使用了CURL,但每次的结果都是一样的

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

我已经激活了所需的插件:WP-restapiJSON-Basic-Authentication


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

查看详细信息

wp-content/plugins/restapi/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;
}

最后,我想出了解决办法。我不得不手动将一些新选项添加到我的.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基本身份验证
重新启动发动机
重写基本/插件/
RewriteCond%{HTTP:Authorization}^(.*)
重写规则^(.*)-[E=HTTP\U授权:%1]
#结束基本身份验证

对于所有面临这些错误的人,在激活JWT后,删除标题中的基本身份验证授权,并在所有情况下(get和post)将customer\u密钥和customer\u secret作为查询参数发送。这可能看起来有些奇怪和不安全,但对我来说是有效的。

错误消息是相同的,正常呼叫,没有身份验证。即使我不发送我的登录凭据,我也会收到此消息。这就是为什么我认为,这可能是身份验证的问题。另外,我发现了另一件事。我在本地主机上安装了一个新的wordpress,只安装了这两个插件,如果我使用“localhost”,但如果我使用本地ip地址“127.0.0.1”,它仍然不起作用身份验证有效。可能未包括Fresh WordPress。htaccess,因此很明显它会引发错误,但对于您的项目,用户角色可能存在问题。我的管理员用户角色为“admin”,因此我无法更改它。正如我所提到的,如果我将url从更改为身份验证,并且我可以使用我的管理员角色用户删除帖子,那么新的wordpress一切都可以正常工作。太棒了!记住要使用SSL,因为基本身份验证会在每个请求中发送用户的实际登录详细信息。看看JWT(JSON Web令牌)我现在使用的Oauth1身份验证的长期版本,基本版本仅用于测试,我在Oauth1中遇到了同样的问题,所以这个htaccess也解决了这个问题。:)酷-对于移动应用程序,我发现JWT更容易设置,但Oauth可以工作。我只是希望使用的Oauth 1a或2