Problema de autenticación con API REST - rest_cannot_create
Estoy usando la API REST en WordPress. Para la autenticación estoy usando el plugin Basic Authentication (JSON Basic Authentication)
Uso esta petición (tanto desde Postman como desde Node.js):
POST /wp-json/wp/v2/posts HTTP/1.1
Host: **************
Authorization: Basic *********************
Content-Type: application/json
Cache-Control: no-cache
{ "title": "test", "content": "test", "status": "private", "excerpt": "test" }
Cuando pruebo localmente en mi servidor, funciona bien pero en un VPS obtengo el siguiente error:
{
"code": "rest_cannot_create",
"message": "Lo sentimos, no tienes permiso para crear entradas como este usuario",
"data": {
"status": 401
}
}
Sé que las credenciales del usuario son correctas y que el usuario tiene permisos para crear entradas.
Sospecho que la cabecera de autenticación se pierde en algún punto antes de llegar a la API REST. ¿Pero por dónde debería empezar a depurar? ¿Qué registros debería consultar?
Si estás aquí porque ya lo has intentado todo y aún no puedes crear recursos a través de la API REST de WordPress, permíteme compartir lo que funcionó para mí.
Primero que nada, déjame darte un poco de contexto: tengo WordPress instalado en una instancia de AWS usando Bitnami.
Luego instalé WooCommerce y habilité su API para usarla como un sistema de pruebas. Inmediatamente después, intenté crear productos usando Postman, pero cada vez recibía errores como "woocommerce_rest_cannot_create" ("Lo siento, no tienes permiso para crear recursos."). Probé diferentes métodos de autenticación como OAuth y Basic Auth, pero ninguno funcionó.
Así que pensé que tal vez debería probar el endpoint de la API de WordPress (en lugar del endpoint de WooCommerce) para ver si podía crear publicaciones o usuarios, pero eso tampoco funcionó. Recibí errores como:
- "
rest_cannot_create" ("Lo siento, no tienes permiso para crear publicaciones como este usuario.") - "
rest_cannot_create_user" ("Lo siento, no tienes permiso para crear nuevos usuarios")
Esto es lo que funcionó para mí:
- Instala el plugin Basic Auth. Puedes instalarlo clonando el repositorio en
/opt/bitnami/apps/wordpress/htdocs/wp-content/pluginsy luego activarlo desde la página de plugins en el Administrador de WordPress. También puedes descargar el repositorio como un archivo zip e instalarlo desde un archivo en la página de plugins del Administrador de WordPress. - Cambia Postman (o la herramienta que estés usando para enviar tus solicitudes) para que use Basic Auth. Usa las credenciales de un usuario Administrador existente.
- Edita el archivo
.htaccessubicado en/opt/bitnami/apps/wordpress/htdocs(Este archivo está oculto, no te asustes si no lo ves). - Añade una nueva línea debajo de
RewriteEngine One insertaRewriteRule .* - [E=REMOTE_USER:%{HTTP:Authorization}], guarda y cierra el archivo. - Edita
/opt/bitnami/apps/wordpress/conf/httpd-app.confy agrega una nueva línea después deRewriteEngine On. - En la nueva línea inserta:
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}], guarda y cierra el archivo. - Reinicia Apache:
sudo /opt/bitnami/ctlscript.sh restart apache - (OPCIONAL) Instala Application Passwords By George Stephanis
Luego volví a intentar desde Postman y todo funcionó perfectamente.
Para más detalles, consulta: https://community.bitnami.com/t/setting-up-api-access-to-wordpress-on-aws-ec2-instance/60589/7
Para mí, descubrí que la respuesta era que tenía que crear y usar una Contraseña de Aplicación de WordPress, en lugar de usar la contraseña normal de inicio de sesión. Una contraseña regular no funcionaría a través de la API.
Las Contraseñas de Aplicación se introdujeron en WordPress 5.6, por lo que esto podría ser relativamente nuevo para algunos: https://make.wordpress.org/core/2020/11/05/application-passwords-integration-guide/