WP-API e Basic Auth restituiscono 403 su POST ma non su GET
Sto utilizzando l'ultima versione di WP-API e il metodo Basic Auth raccomandato per testare l'aggiunta di un post a WordPress da remoto.
Ho configurato gli header di accesso lato WordPress:
header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Methods: GET, POST, PUT, DELETE");
header("Access-Control-Allow-Headers: Authorization, Content-Type");
Quando invio una richiesta GET a: http://sandbox.ravennainteractive.com/wp-json/wp/v2/posts l'autenticazione funziona e restituisce il post "Hello World".
Quando invio una richiesta POST allo stesso URL, ottengo un errore. Ecco la mia chiamata 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('Il tuo commento è stato aggiunto con successo');
},
error: function(data){
console.log(data);
alert('Si è verificato un errore durante l\'aggiunta del tuo commento');
}
});
return false;
});
La risposta è: Failed to load resource: the server responded with a status of 403 (Forbidden)
Array[0]responseText: "[{"code":"rest_forbidden","message":"You don't have permission to do this.","data":{"status":403}}]"
Se eseguo questo blocco di codice semplificato, rimuovendo gli elementi non necessari, la query funziona e restituisce il post "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('Il tuo commento è stato aggiunto con successo');
},
error: function(data){
console.log(data);
alert('Si è verificato un errore durante l\'aggiunta del tuo commento');
}
});
return false;
});
Come posso risolvere questo problema?

Ho riscontrato lo stesso problema.
...l'autenticazione Basic Auth consigliata...
Ho scoperto che il problema è nel plugin Basic Auth. I ragazzi di WP-API consigliano di utilizzare il loro plugin e questa soluzione ha funzionato per me.
- Disattiva tutti i plugin di autenticazione basic attivati nella dashboard di WordPress
- Sul computer dove è installato WordPress, vai alla cartella dei plugin
Esegui
git clone https://github.com/WP-API/Basic-Auth.git
Vai alla dashboard di amministrazione di WordPress, nella pagina dei plugin. JSON Basic Authentication dovrebbe essere nella lista. Attivalo.
Ora la creazione di un record tramite richiesta POST dovrebbe funzionare.

Grazie per la nota, hai provato questo negli ultimi giorni? Stavo usando il loro plugin BasicAuth, ho visto la nota nella documentazione che diceva di dover usare il loro.

L'ho provato ieri. POST ha iniziato a funzionare correttamente una volta installato e attivato il plugin.

Certo. 'JSON Basic Authentication' - versione 0.1 del team WordPress API. 'WP REST API' versione 1.2.4 del team WP REST API (ho anche provato la versione 2.0-beta6, l'autenticazione ha funzionato correttamente con essa). WordPress v 4.3.1. Sentiti libero di fare qualsiasi domanda.
