让代码更简单

WordPress控制REST API访问权限代码

重要:本文最后更新于2019-05-25 08:29:14,某些文章具有时效性,若有错误或已失效,请在下方留言或联系代码狗

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端点没有测试过是否有效,大家有兴趣自行测试。

感觉很棒!可以赞赏支持我哟~

0 打赏

评论 (3)

登录后评论
关了更安全些
移除了会影响小程序不
QQ咨询 邮件咨询 狗哥推荐