Как обойти ключ веб-сеанса, когда я запрашиваю API устройства

У меня есть веб-приложение и приложение ios (не было сделано мной, я не могу вносить в него какие-либо изменения кода), но оба они используют один и тот же бэкэнд для получения данных (это та часть, к которой у меня есть доступ часть бэкэнда, если она написана на php на платформе codeigniter.
Когда я сделал часть входа на веб-сайте, я использовал контроллер входа и ловушку для передачи сеанса на все мои контроллеры.

это сторона входа в систему:

public function login_validation() {
$this->load->library('form_validation');
$this->form_validation->set_rules('username','Username',
'required|trim|callback_validate_credentials');
$this->form_validation->set_rules('password','Password','required|trim');

if ($this->form_validation->run()) {
$data= array(
'username'=> $this->input->post('username'),
'is_logged_in' => true
);
$this->session->set_userdata($data);
redirect('Monitor');
} else {
$this->load->view('login');
}
}

а это мой хук

<?php
class Authenticate {
protected $CI;

public function __construct() {
$this->CI = &get_instance();
}

public function check_user_login() {
$isLoginRequested = $this->_endsWith(base_url(uri_string()), "Main/login");
$isLoginValidating = $this->_endsWith(base_url(uri_string()), "Main/login_validation");

// echo  $this->CI->session->userdata('is_logged_in') ;
if(false == $this->CI->session->userdata('is_logged_in') &&
$isLoginRequested == false && $isLoginValidating == false) {
redirect('Main/login');
}
}

function _endsWith($haystack, $needle) {
$length = strlen($needle);
if ($length == 0) {
return true;
}
return (substr($haystack, -$length) === $needle);
}
}
?>

Теперь логин на устройстве ios запрашивает заголовок X-SESSION-KEY на API. На этом API:

public function types() {
$userSession = $this->_get_user_session();
$reqLanguage = $this->input->get_request_header('Accept-Language');

if ($userSession != null) {
if ($userSession->isLoggedIn() == true) {
$this->_issue_success($this->ptypes->getAll($reqLanguage));
} else {
$this->_issue_respond_with_reason("The provided session is invalid.", HttpResponse::Forbidden);
}
} else {
$this->_issue_respond_with_reason("No session key supplied.", HttpResponse::Forbidden);
}

Но то, что происходит сейчас, по одному и тому же URL-адресу (как я уже говорил, оба приложения используют один и тот же сервер), теперь мое приложение ios запрашивает веб-сеанс, а не API, и я буду перенаправлен при входе в систему.
И по этому URL (в приложении IOS) я получаю:

{"reason":"No session key supplied."}

и мои контроллеры не отправляют никаких данных.
Мой вопрос заключается в том, как я могу создать переменную if на стороне контроллера входа, когда пользователь (вошедший в систему с ios) запрашивает сторону сеансов API, обойти мой сеанс веб-сеанса и избежать того, чтобы сессионный ключ не предоставлялся.
До моего входа приложение работало нормально.

2

Решение

Задача ещё не решена.

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

Других решений пока нет …

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