WordPress 禁用未登录的用户访问 REST API

方法一:完全禁用未登录用户获取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('非法操作!');
    }
}

方式二:过滤部分端点不能访问
通过访问http://www.test.com/wp-json/,查看需要过滤的端点

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;
});

foreach ($endpoints as $key=>$value){
        if(preg_match("/^(\/wp\/v2|\/oembed\/1.0|\/ft\/v1)/",$key)){
            unset( $endpoints[$key] );
        }
    }
//
if ( isset( $endpoints['/'] ) ) {
    unset( $endpoints['/'] );
}

方式三:从API中删除所有端点

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

组合使用:部分api,登录可以访问

add_filter( 'rest_endpoints', function( $endpoints ){

    foreach ($endpoints as $key=>$value){
        if(preg_match("/^(\/wp\/v2|\/oembed\/1.0|\/ft\/v1)/",$key) && defined(AUTH_KEY)){
            unset( $endpoints[$key] );
        }
    }
    if ( isset( $endpoints['/'] ) ) {
        unset( $endpoints['/'] );
    }
    return $endpoints;
});

未经允许不得转载:哈勃私语 » WordPress 禁用未登录的用户访问 REST API

本文共1059个字 创建时间:2018年7月2日12:11   

分享到:更多 ()