La REST API de WordPress es una poderosa herramienta que permite interactuar con tu sitio a través de solicitudes HTTP. Sin embargo, puede haber ocasiones en las que desees restringir el acceso a la API, especialmente para usuarios que no han iniciado sesión, por razones de seguridad o privacidad.

¿Cómo deshabilitar el acceso a la REST API para usuarios no autenticados?

De forma predeterminada, WordPress permite que ciertos endpoints de la REST API sean accesibles públicamente. Para restringir este acceso, puedes usar el filtro rest_authentication_errors. El siguiente código permite bloquear las solicitudes a la API REST para cualquier usuario no autenticado y devuelve un mensaje de error personalizado.

add_filter(‘rest_authentication_errors’, function($result) {
if (!empty($result)) {
return $result;
}
if (!is_user_logged_in()) {
return new WP_Error(‘rest_not_logged_in’, ‘Debes iniciar sesión para acceder a la API REST.’, array(‘status’ => 401));
}
return $result;
});

¿Qué hace este código?

  1. Filtro rest_authentication_errors: Este filtro se utiliza para controlar los errores de autenticación en la REST API.
  2. Comprobación de errores previos: Si $result ya contiene un error, lo devuelve tal cual.
  3. Verificación de sesión del usuario: Si el usuario no ha iniciado sesión (!is_user_logged_in()), se devuelve un error WP_Error con un mensaje personalizado y un código de estado HTTP 401 (No autorizado).
  4. Retorno de resultados: Si no se cumplen las condiciones anteriores, permite continuar con el manejo normal de la solicitud.

Resultado

Con este código implementado, cualquier usuario no autenticado recibirá un mensaje de error indicando que debe iniciar sesión para acceder a la API REST. Esto protege la API REST de accesos no autorizados.