Использование метода POST возвращает запрещенный код 403 (WP-REST-API)

Я совершенно новичок в wordpress/php. Я пытаюсь использовать Angular с остальным API для выполнения базового CRUID в пользовательской таблице professor_schedule.

Для запроса таблицы все работает. Это то, что у меня есть.

PHP

// get all schedules
function getAllProfessorSchedule( $data ) {
    global $wpdb;
    $query = "SELECT nom FROM `professor_schedule`";
    $list = $wpdb->get_results($query);
    return $list;
}
add_action( 'rest_api_init', function () {
    register_rest_route( 'professor-schedule/v2', '/all', array(
    'methods' => WP_REST_Server::READABLE,
    'callback' => 'getAllProfessorSchedule'
    ));
});

JS

function getAllSchedules(){
  $http({
    method: 'GET',
    url : 'http://localhost/structurecours/index.php/wp-json/professor-schedule/v2/all'

  }).then(function (response) {
          console.log(response.data)
          $scope.data = response.data
    }, function (response) {
      console.error("error !! ", response)
  });
}

Ниже приведен код для вставки данных в БД. Сервер отвечает 403 (Forbidden).

Я вошел в систему с учетной записью администратора. Я пробовал использовать плагин Basic Auth, но Я всегда получаю ошибку 403. Я борюсь уже несколько часов. Я бы получил любые советы. Спасибо

PHP

function addNewSchedule( WP_REST_Request $request ) {
    // $args = array(
    //  'headers' => array(
    //      'Authorization' => 'Basic ' . base64_encode( 'user:password' ),
    //  ),
    // );
    // wp_remote_request( $url, $args );


    global $wpdb;
    $item = $request->get_json_params();

    $fields = array();
    $values = array();
    foreach($item as $key => $val) {
        array_push($fields, $key);
        array_push($values, $val);
    }
    $fields = implode(", ",$fields);
    $values = implode("','",$values);
    $query = "INSERT INTO `professor_schedule` (".$fields.") VALUES ('".$values."')";
    //$query = "INSERT INTO `professor_schedule` ('Nom') VALUES ('test')";
    $list = $wpdb->get_results($query);

    return $list;
}


add_action( 'rest_api_init', function () {
  register_rest_route( 'professor-schedule/v2', '/add', array(
    'methods' => WP_REST_Server::CREATABLE,
    'callback' => 'addNewSchedule',
    'permission_callback' => function () {
      return current_user_can( 'edit_others_posts' );
    }
  ) );
} );

JS

$scope.addNewSchedule = function(){

  $http({
      method : "POST",
      url : "http://localhost/structurecours/index.php/wp-json/professor-schedule/v2/add",
      params:
      {
          nom : $scope.scheduleModel.nom
      }
  }).then(function(){
    getAllSchedules();
  });
}

person Merlin    schedule 18.06.2017    source источник
comment
Из какого из этих фрагментов исходит ошибка?   -  person Robert Rocha    schedule 18.06.2017
comment
функции addNewSchedule   -  person Merlin    schedule 18.06.2017


Ответы (2)


У меня была такая же проблема с конечными точками WordPress. Вы можете попробовать отключить mod_security на своем сервере или сделать исключение для mod_security для конечных точек REST. Также вы можете попробовать WordPress на своем локальном сервере и подтвердить проблему.

person Dumindu Madushanka    schedule 25.06.2017

Вы можете попробовать отключить mod_recurity, добавив следующий код в файл .htaccess. Но иногда это не сработает и придется обращаться к хостинг-провайдеру.

<IfModule mod_security.c>
 SecFilterEngine Off
 SecFilterScanPOST Off
</IfModule>
person Prasad Gayan    schedule 20.06.2021