6

デバッグには Phil Sturgeon の REST サーバー、CI3、および POSTMAN を使用しています。以下の情報を含む PUT を送信しましたが、予期したエラー メッセージが表示されません。

ここに私のform_validation.phpがあります:

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

$config = array(
  'student_put' => array(
    array('field' => 'email_address', 'label' => 'email_address', 'rules' => 'trim|required|valid_email'),
    array('field' => 'password', 'label' => 'password', 'rules' => 'trim|required|min_length[8]|max_length[16]'),
    array('field' => 'first_name', 'label' => 'first_name', 'rules' => 'trim|required|max_length[50]'),
    array('field' => 'last_name', 'label' => 'last_name', 'rules' => 'trim|required|max_length[50]'),
    array('field' => 'phone_number', 'label' => 'phone_number', 'rules' => 'trim|required|alpha_dash'),
  )
);

?>

コントローラー Api.php のメソッドは次のとおりです。

function student_put(){
    $this->form_validation->set_data($this->put());
    // these are the rules set in config/form_validation.php
    if ($this->form_validation->run('student_put') != FALSE) {
        die('good data');
    } else { 
        $this->response( 
            array(
                'status'=> 'failure', 
                'message'=> $this->form_validation->get_errors_as_array(),
                ), 
            REST_Controller::HTTP_BAD_REQUEST  
        );
    }
}

これは、MY_Form_validation.php として私のライブラリ フォルダーにあります。

<?php

class MY_Form_validation extends CI_Form_validation {

  function __construct($rules = array()) {
      parent::__construct($rules);
      $this->ci =& get_instance();
  }

  public function get_errors_as_array() {
      return $this->_error_array;
  }

  public function get_config_rules() {
      return $this->_config_rules;
  }

  public function get_field_names($form) {
      $field_names = array();
      $rules = $this->get_config_rules();
      $rules = $rules[$form];
      foreach ($rules as $index=> $info) {
          $field_names[] = $info['field'];
      }
      return $field_names;
  }
}

POSTMANに以下を入れると:

X-API-KEY          123456
first_name         test
email_address      abc

これは私が得る結果です:

{
  "status": "failure",
  "message": []
}

しかし、検証エラーが発生するはずです。

デバッグ手順として、以下を確認しました: - 認証エラーなし - form_validation.php が読み込まれている - 変更した場合:

'message'=> $this->form_validation->get_errors_as_array(),

'message'=> 'test',

郵便配達員は次のように返します。

{
"status": "failure",
"message": "test"
}

どんな助けでも大歓迎です。

4

2 に答える 2

3

このリンクを読む必要があります。

http://code.tutsplus.com/tutorials/working-with-restful-services-in-codeigniter-2--net-8814

apikey を使用する場合は、設定する必要があります

    $config['rest_auth'] = 'basic'
    $config['rest_enable_keys'] = TRUE;

また、APIキーを保存するためのテーブルをデータベースに作成します

CREATE TABLE `keys` (
    `id` INT(11) NOT NULL AUTO_INCREMENT,
    `user_id` INT(11) NOT NULL,
    `key` VARCHAR(40) NOT NULL,
    `level` INT(2) NOT NULL,
    `ignore_limits` TINYINT(1) NOT NULL DEFAULT '0',
    `is_private_key` TINYINT(1)  NOT NULL DEFAULT '0',
    `ip_addresses` TEXT NULL DEFAULT NULL,
    `date_created` INT(11) NOT NULL,
    PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

そのデータベースに最小1行を挿入します。重要な列のみのキーであり、apikeyです

セキュリティ上の理由から、apikey には 40 桁の英数字が含まれている必要があります

繰り返しになりますが、ドキュメントと application/config の rest.php を読む必要があります。

    $config['rest_valid_logins'] = ['admin' => '1234'];

そのログインはデフォルトで設定されているため、クライアント要求などのヘッダーにそのログインを挿入する必要があります

    http_user           'admin'
    http_pass           '1234'
    X-API-KEY           '123456'
    first_name          test
    email_address       abc

そのヘッダーが機能しない場合は、これを試してください

    http_user           'admin'
    http_pass           '1234'
    api_name            'X-API-KEY'
    api_key             '123456'
    first_name          test
    email_address       abc

以前にこのようなリクエストを試したことがある場合は、

    $config['rest_auth'] = FALSE

実際にはまだAPI Webサービスを保護していません

于 2016-04-21T01:50:57.850 に答える
0

POSTman 内の [ヘッダー] タブに PUT 変数を配置していました。

X-API-KEY のみがリクエスト ヘッダーに属します。残りのデータ (例: email_address、first_name など) は、要求の本文 (例: POSTman の Body タブ内から) で渡す必要があります。

すべてが正しく動作するようになりました。

于 2016-04-28T03:38:26.793 に答える