Вопрос или проблема
Я хотел бы заблокировать доступ неавторизованным пользователям к страницам с JSON индексами, таким как /wp-json и /wp-json/myplugin/v1. Есть ли способ сделать это? В настоящее время у меня все (кроме страницы входа) заблокировано для всех неавторизованных пользователей, но есть еще несколько страниц, которые я хотел бы добавить, и я не хочу в итоге поддерживать длинный список разрешенных страниц.
У меня больше нет доступа к коду, где я в конечном итоге решил это, но фильтры rest_endpoints_description
и rest_route_data
почти наверняка были задействованы. https://developer.wordpress.org/reference/classes/wp_rest_server/get_data_for_routes/
Ответ или решение
Вопрос о том, как ограничить доступ к индексным страницам REST API для неаутентифицированных пользователей, является актуальной задачей для обеспечения безопасности вашего сайта WordPress. Рассмотрим, как можно реализовать это, используя фрагмент кода и необходимые фильтры.
Реализация ограничения доступа к JSON-страницам REST API
Чтобы запретить неаутентифицированным пользователям доступ к вашему REST API, включая стандартные маршруты типа /wp-json
и ваши пользовательские маршруты, такие как /wp-json/myplugin/v1
, вы можете использовать механизм разрешения (permissions callback). Это позволяет вам установить персонализированную логику аутентификации на основе ваших требований безопасности.
Подробная инструкция
-
Использование фильтра ‘rest_endpoints’
WordPress предоставляет фильтр
rest_endpoints
, который позволяет вам модифицировать зарегистрированные маршруты API. Вы можете использовать его, чтобы добавить функцию проверки доступа для ваших маршрутов.add_filter('rest_endpoints', function($endpoints) { if ( isset($endpoints['/']) ) { $endpoints['/'][0]['permission_callback'] = function() { return is_user_logged_in(); }; } foreach ( $endpoints as $route => $handlers ) { foreach ( $handlers as $handler ) { if ( isset($handler['permission_callback']) ) { $handler['permission_callback'] = function() { return is_user_logged_in(); }; } } } return $endpoints; });
-
Проверка аутентификации
В данном примере, мы заменяем существующую или добавляем функцию проверки разрешения (
permission_callback
), применяяis_user_logged_in()
. Эта функция гарантирует, что только аутентифицированные пользователи могут получить доступ к страницам API. -
Использование правил обратного вызова
Вы также можете создать сложную логику для
permission_callback
, учитывающую разные уров