WP-API și Basic Auth returnează 403 la POST dar nu la GET - Soluții
Folosesc ultima versiune de WP-API și Basic Auth recomandat, pentru a testa adăugarea unui post în WP de la distanță.
Am deschis headerele de Access pe partea de WP:
header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Methods: GET, POST, PUT, DELETE");
header("Access-Control-Allow-Headers: Authorization, Content-Type");
Când trimit un request GET la: http://sandbox.ravennainteractive.com/wp-json/wp/v2/posts apelul se autentifică ușor și returnează postul Hello World.
Când trimit un request POST la același URL, primesc o eroare. Iată apelul meu AJAX cu 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('Comentariul tău a fost adăugat cu succes');
},
error: function(data){
console.log(data);
alert('A apărut o eroare la adăugarea comentariului');
}
});
return false;
});
Răspunsul este: Failed to load resource: the server responded with a status of 403 (Forbidden)
Array[0]responseText: "[{"code":"rest_forbidden","message":"Nu ai permisiunea să faci asta.","data":{"status":403}}]"
Dacă rulez acest bloc de cod, eliminând elementele inutile, interogarea funcționează și returnează postul 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('Comentariul tău a fost adăugat cu succes');
},
error: function(data){
console.log(data);
alert('A apărut o eroare la adăugarea comentariului');
}
});
return false;
});
Cum pot rezolva această problemă?

Am întâlnit aceeași problemă.
...autentificarea Basic Auth recomandată...
Am descoperit că problema este în plugin-ul Basic Auth. Echipa WP-API recomandă utilizarea propriului lor plugin și această soluție funcționează pentru mine.
- Dezactivează toate plugin-urile de autentificare basic activate în panoul de administrare WordPress
- Pe mașina pe care rulează WordPress-ul tău, accesează folderul de plugin-uri
Rulează
git clone https://github.com/WP-API/Basic-Auth.git
Accesează panoul de administrare WordPress, pagina de plugin-uri. JSON Basic Authentication ar trebui să apară în listă. Activează-l.
Acum crearea unei înregistrări prin cerere POST ar trebui să funcționeze.

Mulțumesc pentru notă, ai încercat asta în ultimele zile? Am folosit plugin-ul lor BasicAuth, am văzut notița din documentație care spunea că trebuie să folosești al lor.

Am încercat asta ieri. POST a început să funcționeze corect odată ce am instalat și activat plugin-ul.

ultima întrebare, poți să împărtășești numerele de versiune ale plugin-urilor?

Sigur. 'JSON Basic Authentication' - versiunea 0.1 de către WordPress API Team. 'WP REST API' versiunea 1.2.4 de WP REST API Team (de asemenea, am încercat versiunea 2.0-beta6, autentificarea a funcționat corect cu ea). WordPress v 4.3.1. Nu ezita să pui orice întrebări.
