Я пытаюсь реализовать приложение на базе Codeigniter для Android через phonegap, все работает хорошо, кроме входа / выхода с аутентификацией танка.
Когда форма входа в систему отправлена, она продолжает отображать диалоговое окно с надписью «Выполнить действие, используя», с возможностью выбрать браузер, а не оставаться в окне приложения.
Если вы выбираете браузер, он снова открывает окно браузера со страницей входа, но если приложение перезапускается, оно входит в систему.
Как я могу остановить этот переход к браузерутак приложение без шва?Я думаю, что это когда танк аутентификации пишет / уничтожает информацию о куки.Это выполняется в подпапке / android в корневом каталоге, так как клиентский хост не поддерживает субдомены.
Это код авторизации танка с авторизацией.Обратите внимание, что «home» является контроллером по умолчанию.
РЕДАКТИРОВАТЬ: мне на самом деле не нужно принимать диалоговое окно «Complete action using» - если я просто нажму назад и перезапущу приложение, оно вошло в систему!Жаль, что я не знаю, что заставляет всплывающее диалоговое окно, на самом деле я очень впечатлен, что PhoneGap удалось обернуть полный CI-сайт с аутентификацией вообще ...
function login()
{
if ($this->tank_auth->is_logged_in()) { // logged in
redirect('home');
} elseif ($this->tank_auth->is_logged_in(FALSE)) { // logged in, not activated
redirect('/auth/send_again/');
} else {
$data['login_by_username'] = ($this->config->item('login_by_username', 'tank_auth') AND
$this->config->item('use_username', 'tank_auth'));
$data['login_by_email'] = $this->config->item('login_by_email', 'tank_auth');
$this->form_validation->set_rules('login', 'Login', 'trim|required|xss_clean');
$this->form_validation->set_rules('password', 'Password', 'trim|required|xss_clean');
$this->form_validation->set_rules('remember', 'Remember me', 'integer');
// Get login for counting attempts to login
if ($this->config->item('login_count_attempts', 'tank_auth') AND
($login = $this->input->post('login'))) {
$login = $this->security->xss_clean($login);
} else {
$login = '';
}
$data['use_recaptcha'] = $this->config->item('use_recaptcha', 'tank_auth');
if ($this->tank_auth->is_max_login_attempts_exceeded($login)) {
if ($data['use_recaptcha'])
$this->form_validation->set_rules('recaptcha_response_field', 'Confirmation Code', 'trim|xss_clean|required|callback__check_recaptcha');
else
$this->form_validation->set_rules('captcha', 'Confirmation Code', 'trim|xss_clean|required|callback__check_captcha');
}
$data['errors'] = array();
if ($this->form_validation->run()) { // validation ok
if ($this->tank_auth->login(
$this->form_validation->set_value('login'),
$this->form_validation->set_value('password'),
$this->form_validation->set_value('remember'),
$data['login_by_username'],
$data['login_by_email'])) { // success
$this->load->library('user_agent');
redirect('home'); // Adds this onto /android/
} else {
$errors = $this->tank_auth->get_error_message();
if (isset($errors['banned'])) { // banned user
$this->_show_message($this->lang->line('auth_message_banned').' '.$errors['banned']);
} elseif (isset($errors['not_activated'])) { // not activated user
redirect('/auth/send_again/');
} else { // fail
foreach ($errors as $k => $v) $data['errors'][$k] = $this->lang->line($v);
}
}
}
$data['show_captcha'] = FALSE;
if ($this->tank_auth->is_max_login_attempts_exceeded($login)) {
$data['show_captcha'] = TRUE;
if ($data['use_recaptcha']) {
$data['recaptcha_html'] = $this->_create_recaptcha();
} else {
$data['captcha_html'] = $this->_create_captcha();
}
}
$this->load->view('view_header');
$this->load->view('auth/login_form', $data);
}
}