WordPress控制REST API访问权限代码

WordPress4.7版本及以后都默认开启了rest api,这个东西在方便我们制作各种客户端的同时,也让我…

WordPress4.7版本及以后都默认开启了rest api,这个东西在方便我们制作各种客户端的同时,也让我们的网站数据暴露出来。比如某些采集器通过wp rest api采集文章内容更加方便,虽然显示在网页中也一样会被采集。为了避免这个问题,很多没有使用到wp rest api接口的站长就选择关闭这个接口。其实,在开启的情况下应该是可以筛选用户权限的。为了更好的操纵这个接口,下面分享几个控制 wp rest api的过滤器钩子。

发送api请求时触发

do_action( 'rest_api_init', WP_REST_Server $wp_rest_server )

使用实例,禁止未登录用户使用WordPress rest api:

/*禁用未登录的用户*/
add_filter( 'rest_api_init', 'rest_only_for_authorized_users', 99 );
function rest_only_for_authorized_users($wp_rest_server){
if ( !is_user_logged_in() ) {
wp_die('非法操作!');
}
}

移除api请求端点

apply_filters( 'rest_endpoints', array $endpoints )

使用实例,移除部分user用户端点:

add_filter( 'rest_endpoints', function( $endpoints ){
if ( isset( $endpoints['/wp/v2/users'] ) ) {
unset( $endpoints['/wp/v2/users'] );
}
if ( isset( $endpoints['/wp/v2/users/(?P<id>[d]+)'] ) ) {
unset( $endpoints['/wp/v2/users/(?P<id>[d]+)'] );
}
return $endpoints;
});

这些端点可以在wp rest api源码中看到。

移除整个wp rest api接口

add_action(' plugins_loaded 'function(){
 remove_filter(' rest_api_init '' create_initial_rest_routes '); 
});

从这段代码来看,rest api是以插件的形式被WordPress加载的,移除api端点没有测试过是否有效,大家有兴趣自行测试。

类别:WordPress教程

本文收集自互联网,转载请注明来源。
如有侵权,请联系 wper_net@163.com 删除。

评论 (0)COMMENT

登录 账号发表你的看法,还没有账号?立即免费 注册