无法使用 WP REST API 2.0 插件通过基本身份验证进行身份验证
Can't authenticate with basic authentication using WP REST API 2.0 plugin
我遇到了基本身份验证问题。
尝试使用以下 url 通过 Postman(chrome 插件)发送 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 API、JSON 基本身份验证.
我的wordpress版本:4.4.2
我认为问题不是从服务器获取用户数据,而是这个错误代码是你的身份验证问题
具有此用户能力或角色可能不是管理员
查看详情
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;
}
终于,我找到了解决办法。我不得不手动添加一些新选项到我的 .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
对于所有面临这些错误的人,请删除 headers 中的基本身份验证授权,并在所有情况下将 customer_key 和 customer_secret 作为查询参数发送(get 和 post) 激活 JWT 后。这可能看起来很奇怪和不安全,但它对我有用。
我遇到了基本身份验证问题。
尝试使用以下 url 通过 Postman(chrome 插件)发送 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 API、JSON 基本身份验证.
我的wordpress版本:4.4.2
我认为问题不是从服务器获取用户数据,而是这个错误代码是你的身份验证问题 具有此用户能力或角色可能不是管理员
查看详情
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;
}
终于,我找到了解决办法。我不得不手动添加一些新选项到我的 .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
对于所有面临这些错误的人,请删除 headers 中的基本身份验证授权,并在所有情况下将 customer_key 和 customer_secret 作为查询参数发送(get 和 post) 激活 JWT 后。这可能看起来很奇怪和不安全,但它对我有用。