Tuesday, April 26, 2016

Phil Sturgeon's REST server, Codeigniter3, error messages no return on PUT

Leave a Comment

I am using Phil Sturgeon's REST server, CI3 and POSTMAN for debugging. I send a PUT with below info, however, I am not receiving the error messages expected.

Here is my 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'),   ) );  ?> 

Here is my method in my 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           );     } } 

This is in my libraries folder as 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;   } } 

When I put following in POSTMAN:

X-API-KEY          123456 first_name         test email_address      abc 

This is the result I get:

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

But I should be getting the validation errors.

As debugging steps, I have confirmed: - no auth errors - the form_validation.php is being read - if I change:

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

to

'message'=> 'test', 

the postman returns:

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

Any help very much appreciated.

1 Answers

Answers 1

you must read this link,

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

if you use apikey, you must set

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

also make a table in database for storing api key

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; 

insert into that database minimum 1 row, the important column only key, it is the apikey

the apikey must contains 40 digits alphanumeric for security reasons

and again, you must read documentation, and the rest.php in application/config

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

that login is set by default, so you must insert that login in your header of client request, etc

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

if that header not work, try this

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

if you have try request like this before with your

    $config['rest_auth'] = FALSE 

actually you not yet securing your api webservice

If You Enjoyed This, Take 5 Seconds To Share It

0 comments:

Post a Comment