2016-04-17 4 views
6

Ich benutze Phil Sturgeon REST-Server, CI3 und POSTMAN zum Debuggen. Ich sende ein PUT mit unten stehenden Informationen, ich erhalte jedoch nicht die erwarteten Fehlermeldungen.Phil Sturgeon REST-Server, Codeigniter3, Fehlermeldungen keine Rückkehr auf PUT

Hier ist meine 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'), 
) 
); 

?> 

Hier ist meine Methode in meinem Controller 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 
     ); 
    } 
} 

Das in meinen Bibliotheken als MY_Form_validation.php Ordner ist:

<?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; 
    } 
} 

Wenn ich folgende in POSTMAN:

X-API-KEY   123456 
first_name   test 
email_address  abc 

Dies ist das Ergebnis, das ich bekommen:

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

Aber ich sollte die Validierungsfehler bekommen.

Als Debug-Schritte, ich habe bestätigt: - keine Auth Fehler - die form_validation.php gelesen wird - wenn ich ändern:

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

zu

'message'=> 'test', 

der Postmann kehrt :

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

Beliebig Hilfe sehr geschätzt.

+0

was ist die Einstellung in application/config/rest.php? – keronconk

+0

Auf welche Einstellung beziehen Sie sich besonders? Ich denke, ich sollte es vermeiden, die Enter-Datei als sehr lange zu veröffentlichen. – user3264461

+0

Was ist die Einstellung von $ config ['rest_auth'] und $ config ['rest_enable_keys']? – keronconk

Antwort

3

Sie diesen Link lesen müssen,

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

wenn Sie apikey verwenden, müssen Sie

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

auch eine Tabelle in der Datenbank festgelegt zum Speichern von api machen Schlüssel

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; 

In diese Datenbank mindestens 1 Zeile einfügen, nur die wichtige Spalte Schlüssel ist es die apikey

die apikey muss aus Sicherheitsgründen 40 Stellen alphanumerische enthält

und wieder müssen Sie die Dokumentation und den Rest lesen.php in Anwendung/config

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

, die standardmäßig eingestellt Login ist, so können Sie diesen Login in der Kopfzeile der Client-Anforderung einfügen muss, etc

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

wenn dieser Header nicht funktioniert, versuchen Sie diese

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

wenn haben Sie Anfrage wie diese versuchen, bevor Sie mit Ihrem

$config['rest_auth'] = FALSE 

tatsächlich sichern Sie noch nicht Ihren API-Webservice

+0

Vielleicht hast du meinen letzten Kommentar nicht gesehen? Ich habe keine Authentifizierungsfehler. Ich bin in der Lage, Daten von meinem DB mit nur Schlüssel mit GET + http: // localhost: 8000/Api/Student/1 (Wenn ich den Schlüssel ändern, bekomme ich 403 Fehler. Mit dem richtigen bekomme ich 200). Das Problem, das ich habe, ist mit PUT (keine Authentifizierung). Antwort erhalten: {"Status": "Fehler", "Nachricht": []} FYI, ja, verwende eine Tasten Tabellen, etc. FYI, Rest.php gibt MAX 40 Zeichen für Schlüssel. Es kann weniger sein, in meinem Fall 6 Zeichen. In Config gibt es eine Einstellung, Authentifizierung erlauben und API Keys bedeuten FALSE für nur Keys und TRUE für beide. – user3264461

+0

Meinst du, um PUT zu verwenden, muss ich KEYS und mindestens BASIS auth verwenden? – user3264461

+0

Hier ist eine identische Kopie des Codes, den ich verwende: https://github.com/alexmarton/RControl Einfach herunterladen und ersetzen Sie die Dateien in einer neuen Kopie von codeigniter. Der Code stammt aus einem Tutorial. – user3264461

0

Ich legte die PUT-Variablen in die Kopfzeilen Registerkarte in POSTman.

Nur der X-API-KEY gehört zum Anforderungskopf. Der Rest der Daten (z. B. E-Mail-Adresse, Vorname, usw.) sollte im Anfragetext (z. B. von der Registerkarte "Body" von POSTman) übergeben werden.

Alle funktioniert jetzt korrekt.

Verwandte Themen