0

我正在尝试通过 phonegap 在 Android 上实现一个基于 Codeigniter 的应用程序,除了使用 tank auth 登录/注销之外,所有这些都运行良好。

提交登录表单时,它会一直显示一个对话框,上面写着“使用完成操作”,并带有选择浏览器的选项,而不是停留在应用程序窗口中。

如果您选择浏览器,它会再次打开一个带有登录页面的浏览器窗口,但如果重新启动应用程序,它就会登录。

如何停止跳转到浏览器以使应用程序无缝?我认为是当 tank auth 正在写入/销毁 cookie 信息时。这是在根目录下的 /android 子文件夹中运行的,因为客户端主机不支持子域。

这是坦克身份验证登录代码。请注意,“home”是默认控制器。

编辑:我实际上不需要接受“使用完成操作”对话框 - 如果我只是单击返回并重新启动它已登录的应用程序!希望我知道是什么让那个对话框弹出来了,我对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);
    }
}
4

2 回答 2

1

自己排序 - 我在/src文件夹中的 Java Activity 文件中添加了以下内容,就在该super.loadUrl行之前:

super.setBooleanProperty("loadInWebView", true);

这使得所有链接都在 WebView 中打开,即在应用程序内部。适合这样简单的事情。

花了5个小时拖网,但最终到达那里......:/

于 2011-11-24T17:16:12.170 回答
0

你可能想看看这个教程:

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

它使用 PhoneGap 中的 ChildBrowser 进行 oauth 登录。您也许可以对其进行调整以进行坦克身份验证登录。

于 2011-11-23T15:32:59.887 回答