WP-API и Basic Auth возвращают 403 на POST, но работают с GET
Я использую последнюю версию WP-API и рекомендуемую Basic Auth для тестирования добавления поста в WordPress удаленно.
На стороне WordPress у меня открыты заголовки доступа:
header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Methods: GET, POST, PUT, DELETE");
header("Access-Control-Allow-Headers: Authorization, Content-Type");
Когда я отправляю GET-запрос по адресу: http://sandbox.ravennainteractive.com/wp-json/wp/v2/posts, запрос успешно аутентифицируется и возвращает пост "Hello World".
Но когда я отправляю POST-запрос на тот же URL, я получаю ошибку. Вот мой jQuery AJAX-запрос:
$('#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('Ваш комментарий успешно добавлен');
},
error: function(data){
console.log(data);
alert('Произошла ошибка при добавлении комментария');
}
});
return false;
});
Ответ сервера: 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}}]"
Если я запускаю этот блок кода, удаляя лишнее, запрос работает и возвращает пост "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('Ваш комментарий успешно добавлен');
},
error: function(data){
console.log(data);
alert('Произошла ошибка при добавлении комментария');
}
});
return false;
});
Как я могу решить эту проблему?

Я столкнулся с такой же проблемой.
...рекомендованная Basic Auth...
Я обнаружил, что проблема в плагине Basic Auth. Разработчики WP-API рекомендуют использовать их собственный плагин, и это решение сработало у меня.
- Деактивируйте все активные плагины basic auth в админке WordPress
- На сервере, где работает ваш WordPress, перейдите в папку с плагинами
Выполните команду:
git clone https://github.com/WP-API/Basic-Auth.git
Перейдите в админку WordPress на страницу плагинов. В списке должен появиться плагин JSON Basic Authentication. Активируйте его.
Теперь создание записи через POST-запрос должно работать.

Спасибо за заметку, вы пробовали это в последние несколько дней? Я использовал их плагин BasicAuth, видел заметку в документации, что нужно использовать именно их.

Я пробовал это вчера. POST начал работать корректно после установки и активации плагина.

Конечно. 'JSON Basic Authentication' - версия 0.1 от команды WordPress API. 'WP REST API' версия 1.2.4 от команды WP REST API (также я пробовал версию 2.0-beta6, аутентификация работала корректно с ней). WordPress версия 4.3.1. Не стесняйтесь задавать любые вопросы.
