使用POST方法返回禁用403(WP-REST-API)

时间:2017-06-18 17:09:25

标签: php angularjs wordpress-rest-api

我对wordpress / php完全不熟悉我正在尝试使用Angular和其他API在自定义表professor_schedule上执行基本CRUID。

查询表格一切正常。这就是我所拥有的。

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(禁止)

进行响应

我使用Basic Auth plugin尝试过的管理员帐户登录但是我总是收到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();
  });
}

2 个答案:

答案 0 :(得分:0)

我有同样的问题WordPress端点。您可以尝试在服务器上禁用mod_security,或为REST端点mod_security例外。您也可以在本地服务器上尝试WordPress并确认问题。

答案 1 :(得分:0)

您可以尝试通过将以下代码添加到 .htaccess 文件来禁用 mod_recurity。但有时它不起作用,您必须联系托管服务提供商。

<IfModule mod_security.c>
 SecFilterEngine Off
 SecFilterScanPOST Off
</IfModule>