Использование Codeigniter и танк-аутентификации в PhoneGap на Android - PullRequest
0 голосов
/ 23 ноября 2011

Я пытаюсь реализовать приложение на базе 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);
    }
}

Ответы [ 2 ]

1 голос
/ 24 ноября 2011

Сам отсортировал - я добавил следующее в файл Java Activity в папке /src, перед строкой super.loadUrl:

super.setBooleanProperty("loadInWebView", true);

Это делает все ссылки открытыми в WebView, то есть внутри приложения. Прекрасно для чего-то простого.

Потратил 5 часов на траление, но в итоге добрался ...: /

0 голосов
/ 23 ноября 2011

Вы можете посмотреть этот учебник:

http://www.mobiledevelopersolutions.com/home/start/twominutetutorials/tmt5p1

Он использует ChildBrowser в PhoneGap для входа в систему oauth.Возможно, вы сможете адаптировать его для входа в систему через танк.

...