我是管理员角色用户。当我使用REST API时,如果我尝试调用
GET /wp-json/wp/v2/posts?context=edit
我收到以下错误消息:
401 Unauthorized : [rest_forbidden_context] Sorry, you are not allowed to edit posts in this post type.
页面查询也会产生类似的错误。如果我询问:
GET /wp-json/wp/v2/users?context=edit
我收到了一条稍有不同的错误消息:
401 Unauthorized : [rest_forbidden_context] Sorry, you are not allowed to list users.
我可以使用相同的API端点
?context=view
没有问题,但我希望能够查看帖子和页面内容,而无需扩展快捷码,因此我的理解是,我需要查询
edit
上下文
同样,我在服务器上有管理员角色,可以登录到仪表板并编辑任何帖子,所以我不认为这是我的userid的用户权限问题。关于错误的原因有什么想法吗?
其他一些详细信息:我的服务器版本:5.5.3使用用于Python的wordpress\\u json库访问API(在后台使用请求的基本身份验证头)
最合适的回答,由SO网友:Tom J Nowell 整理而成
很明显,管理员无法根据角色和功能系统修改这些帖子。
这是在中生成该错误的代码WP_REST_Post_Types_Controller
:
public function get_items_permissions_check( $request ) {
if ( \'edit\' === $request[\'context\'] ) {
$types = get_post_types( array( \'show_in_rest\' => true ), \'objects\' );
foreach ( $types as $type ) {
if ( current_user_can( $type->cap->edit_posts ) ) {
return true;
}
}
return new WP_Error(
\'rest_cannot_view\',
__( \'Sorry, you are not allowed to edit posts in this post type.\' ),
array( \'status\' => rest_authorization_required_code() )
);
}
return true;
}
因此,python应用程序正在交互的用户没有
edit_posts
能力。假设它正在成功进行身份验证。
What I think has happened here 假设您正在发出未经身份验证的请求,但前提是这些请求已通过身份验证。在这条线路的某个地方发生了错误,可能没有将标题应用于您的请求,等等。
不管怎样,您所描述的是未经身份验证的客户的正常行为。我将仔细查看您的python库。对于像基本auth-restapi这样简单的东西,通用restapi库可能更合适、更可靠。
还请记住,仅使用基本身份验证是不够的,需要在WP端安装并激活插件。WP 5.6还添加了应用程序密码支持,作为更安全的替代方案