WP-API y Basic Auth devuelven 403 en POST pero no en GET
Estoy usando la última versión de WP-API y el Basic Auth recomendado, para probar añadir una publicación en WP desde remoto.
Tengo los Access Headers configurados en el lado de WP:
header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Methods: GET, POST, PUT, DELETE");
header("Access-Control-Allow-Headers: Authorization, Content-Type");
Cuando hago una solicitud GET a: http://sandbox.ravennainteractive.com/wp-json/wp/v2/posts la llamada se autentica fácilmente y devuelve la publicación Hello World.
Cuando hago una solicitud POST a la misma URL, obtengo un error. Aquí está mi llamada AJAX con jQuery:
$('#test-post').submit(function(e){
e.preventDefault();
var title = $( '#title' ).val();
var content = $( '#content_raw' ).val();
var postData = {
title: title,
content: content
}
console.log(postData);
$.ajax({
method: 'POST',
contentType: 'application/json',
data: postData,
url: sandboxUrl,
beforeSend: function( xhr ) {
xhr.setRequestHeader ('Authorization', 'Basic '+ btoa( 'apiuser' + ':' + 'PASSWORD' ));
},
success: function(data){
console.log(data);
alert('Tu comentario se añadió correctamente');
},
error: function(data){
console.log(data);
alert('Hubo un error al añadir tu comentario');
}
});
return false;
});
La respuesta es: Failed to load resource: the server responded with a status of 403 (Forbidden)
Array[0]responseText: "[{"code":"rest_forbidden","message":"No tienes permiso para hacer esto.","data":{"status":403}}]"
Si ejecuto este bloque de código, eliminando extras innecesarios, la consulta funciona y devuelve la publicación Hello World.
$('#test-post').submit(function(e){
e.preventDefault();
$.ajax({
method: 'GET',
url: sandboxUrl,
beforeSend: function( xhr ) {
xhr.setRequestHeader ('Authorization', 'Basic '+ btoa( 'apiuser' + ':' + 'PASSWORD' ));
},
success: function(data){
console.log(data);
alert('Tu comentario se añadió correctamente');
},
error: function(data){
console.log(data);
alert('Hubo un error al añadir tu comentario');
}
});
return false;
});
¿Cómo puedo solucionar esto?

Me he encontrado con el mismo problema.
...la autenticación Basic Auth recomendada...
Descubrí que el problema está en el plugin de Basic Auth. Los desarrolladores de WP-API recomiendan usar su propio plugin y esta solución me funcionó.
- Desactiva todos los plugins de autenticación básica activos en tu panel de WordPress
- En la máquina donde se ejecuta WordPress, ve a la carpeta de plugins
Ejecuta
git clone https://github.com/WP-API/Basic-Auth.git
Ve al panel de administración de WordPress, a la página de plugins. JSON Basic Authentication debería aparecer en la lista. Actívalo.
Ahora, crear un registro mediante una solicitud POST debería funcionar.

Gracias por la nota, ¿probaste esto en los últimos días? Yo estaba usando su plugin BasicAuth, vi la nota en la documentación que decía que tenías que usar el de ellos.

Lo probé ayer. POST comenzó a funcionar correctamente una vez que instalé y activé el plugin.

última pregunta, ¿puedes compartir los números de versión del plugin?

Claro. 'JSON Basic Authentication' - versión 0.1 por el equipo de WordPress API. 'WP REST API' versión 1.2.4 por el equipo de WP REST API (también probé la versión 2.0-beta6, la autenticación funcionó correctamente con esta). WordPress v 4.3.1. No dudes en preguntar cualquier cosa.
