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
0 comments:
Post a Comment