Поддержка Проблемы и решения Баг или так задумано c /wp-json/wp/v2/users ?

Просмотр 4 ответов — с 1 по 4 (всего 4)
  • Модератор Sergey Biryukov

    (@sergeybiryukov)

    Live and Learn

    Если у того 0 публикаций — то информация по нему отдается. Иначе запрещено.

    Если нет публикаций, то информация отдаётся только тем, у кого есть права на просмотр или редактирование пользователей, иначе — не отдаётся:

    
    } elseif ( ! count_user_posts( $user->ID, $types )
        && ! current_user_can( 'edit_user', $user->ID )
        && ! current_user_can( 'list_users' )
    ) {
        return new WP_Error(
            'rest_user_cannot_view',
            __( 'Sorry, you are not allowed to list users.' ),
            array( 'status' => rest_authorization_required_code() )
        );
    }
    

    Если публикации есть, то профиль автора считается публичным и информация отдаётся всегда.

    @sergeybiryukov, спасибо, действительно наоборот, но не важно. Я тут пытался скрыть реального администратора, но и его стали брутфорсить, оказалось, что апи с удовольствием сообщает что пользователя нет — 404, доступ к просмотру запрещен — 401, или публичный 200. Не мудрено что перебрали ID. Хотелось бы не закрывать регистрацию и вход по АПИ, наверное нужно внедрять свою проверку в фильтр rest_authentication_errors https://developer.wordpress.org/rest-api/frequently-asked-questions/#require-authentication-for-all-requests

    Anonymous User 17160716

    (@anonymized-17160716)

    igor-san,

    действительно наоборот, но не важно

    Учитывая, что вы пытаетесь разобраться в ситуации и придумать своё решение, то, по идее, это должно быть важно.

    Нашли решение своей задачи?

    @m0ze, решил как смог (что-то извещения о цитировании тут не работают, случайно заметил обращение) — добавил проверку на свои пути для регистрации, остальные только для авторизованных

    add_filter( 'rest_authentication_errors', 'rest_authentication_errors');
    
    function rest_authentication_errors( $result ) {
    	//https://developer.wordpress.org/rest-api/frequently-asked-questions/
    
    	$allow = ["/wp-json/wp/v2/users/register", "/wp-json/wp/v2/users/checklogin", "/wp-json/wp/v2/users/lostpassword"];
    
    	if ( ! $result && in_array($_SERVER['REQUEST_URI'], $allow)) { //null еще не залогинились, но может это наши пути
    		return true; //разрешаем
    	}
    
        // If a previous authentication check was applied,
    	// pass that result along without modification.
    	if ( true === $result || is_wp_error( $result ) ) {
    		return $result;
    	}
    
    	// No authentication has been performed yet.
    	// Return an error if user is not logged in.
    	if ( ! is_user_logged_in() ) {
    		return new WP_Error(
    			'rest_not_logged_in',
    			__( 'You are not currently logged in.' ),
    			array( 'status' => 401 )
    		);
    	}
    
    	return $result;
    }
Просмотр 4 ответов — с 1 по 4 (всего 4)
  • Тема «Баг или так задумано c /wp-json/wp/v2/users ?» закрыта для новых ответов.