аутентификация на основе токенов в библиотеке серверного кода codeigniter

Я пытаюсь построить успокоительный API в codeigniter используя Фил Стерджен сервер отдыха

Проблема в том, что я не могу понять, как сделать аутентификацию на основе токенов. Я строю этот API для мобильных приложений, и он закончен по HTTPS. Сначала пользователь войдет в систему, войдя в систему, а затем сможет использовать функции приложения.
Я хочу реализовать способом, описанным здесь: Как работает аутентификация на основе токенов

Вопросы:

Если я отправлю токен на сервер в запросе, где я должен проверить правильность?
Поддерживает ли библиотека остальных серверов аутентификацию на основе токенов?
Если это так, какие конфигурации мне нужно сделать? или мне нужно реализовать свои методы аутентификации?

или есть лучший / более простой способ аутентификации вместо токена?

8

Решение

Он не поддерживает аутентификацию токена. Вот изменения, которые я сделал, чтобы добавить его. REST_Controller.php
поиск «switch ($ rest_auth) {» добавить добавить этот случай к нему:

        case 'token':
$this->_check_token();
break;

Затем добавьте эту функцию:

/** Check to see if the user is logged in with a token
* @access protected
*/
protected function _check_token () {
if (!empty($this->_args[$this->config->item('rest_token_name')])
&& $row = $this->rest->db->where('token', $this->_args[$this->config->item('rest_token_name')])->get($this->config->item('rest_tokens_table'))->row()) {
$this->api_token = $row;
} else {
$this->response([
$this->config->item('rest_status_field_name') => FALSE,
$this->config->item('rest_message_field_name') => $this->lang->line('text_rest_unauthorized')
], self::HTTP_UNAUTHORIZED);
}
}

конфиг / rest.php

    // *** Tokens ***
/* Default table schema:
* CREATE TABLE `api_tokens` (
`api_token_id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`token` VARCHAR(50) NOT NULL,
`created` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`api_token_id`)
)
COLLATE='latin1_swedish_ci'
ENGINE=InnoDB
*/
$config['rest_token_name'] = 'X-Auth-Token';
$config['rest_tokens_table'] = 'api_tokens';
2

Другие решения

Контроллер для получения токена:

Я построил остальные контроллеры, чтобы получить токен.

require APPPATH . 'libraries/REST_Controller.php';
class Token extends REST_Controller {
/**
* @response array
*/
public function index_get() {
$data = $this->Api_model->create_token($this->api_customer_id);

// ***** Response ******
$http_code = $data['http_code'];
unset($data['http_code']);
$this->response($data, $http_code);
}
}

Функция в модели для токена:

/** Creates a new token
* @param type $in
* @return type
*/
function create_token ($customer_id) {
$this->load->database();

// ***** Generate Token *****
$char = "bcdfghjkmnpqrstvzBCDFGHJKLMNPQRSTVWXZaeiouyAEIOUY!@#%";
$token = '';
for ($i = 0; $i < 47; $i++) $token .= $char[(rand() % strlen($char))];

// ***** Insert into Database *****
$sql = "INSERT INTO api_tokens SET `token` = ?, customer_id = ?;";
$this->db->query($sql, [$token, $customer_id];

return array('http_code' => 200, 'token' => $token);
}
1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector