Ho un'applicazione Web creata con jQuery Mobile e PHP (framework CodeIgniter). Ora sto cercando di creare anche una versione PhoneGap per renderla distribuibile come app standalone. Tuttavia, l'app Web PHP. la versione utilizza Ion Auth, un plugin CodeIgniter per l'autenticazione. Pertanto, quando si accede a una pagina che richiede l'autenticazione, l'app reindirizza al metodo di accesso del controller di autenticazione. E dopo l'autenticazione, ti reindirizza alla home page (la pagina jQuery Mobile in questo caso). Questo funziona bene nell'app Web., Poiché la home page viene aperta dal controller di casa in primo luogo comunque.Autenticazione in jQuery Mobile e PhoneGap
Ma ecco il punto cruciale: nella versione PhoneGap, la pagina "home" deve essere il file index.html in PhoneGap. Apparentemente puoi caricare un altro url all'avvio aggiungendo un valore in PhoneGap.plist, ma questo non è accettabile da Apple per l'invio all'app store. E se faccio un redirect nel autenticazione, non posso tornare al file index.html dopo l'autenticazione ...
Quindi, come si dovrebbe fare per l'autenticazione in un PhoneGap/jQuery Mobile app?
UPDATE:
Ho provato questo secondo una delle risposte, ma l'applicazione cerca ancora di accedere alla pagina dell'account/login (che non esiste), quando voglio fare il login attraverso il POST e restituiscono un valore dal metodo:
$('#login_form').bind('submit', function() {
event.preventDefault();
//send a post request to your web-service
$.post('http://localhost/app_xcode/account/login', $(this).serialize(), function (response) {
//parse the response string into an object
var response = response;
//check if the authorization was successful or not
if (response == true) {
$.mobile.changePage('#toc', "slide");
} else {
alert('login failed');
$.mobile.changePage('#toc', "slide");
}
});
});
Ecco il metodo di controllo:
function login()
{
//validate form input
$this->form_validation->set_rules('identity', 'Identity', 'required');
$this->form_validation->set_rules('password', 'Password', 'required');
$base_url = $this->config->item('base_url');
$mobile = $this->detect_mobile();
if ($mobile === false && $base_url != 'http://localhost/app_xcode/') //Only restrict if not developing
redirect('account/notAMobile');
else if ($this->form_validation->run() == true) { //check to see if the user is logging in
//check for "remember me"
$remember = (bool)$this->input->post('remember');
if ($this->ion_auth->login($this->input->post('identity'), $this->input->post('password'), $remember)) { //if the login is successful
//redirect them back to the home page
$this->session->set_flashdata('message', $this->ion_auth->messages());
echo true;
/*redirect($this->config->item('base_url'), 'refresh');*/
}
else
{ //if the login was un-successful
//redirect them back to the login page
$this->session->set_flashdata('message', $this->ion_auth->errors());
/*redirect('account/login', 'refresh');*/ //use redirects instead of loading views for compatibility with MY_Controller libraries
}
}
else
{ //the user is not logging in so display the login page
//set the flash data error message if there is one
$this->data['message'] = (validation_errors()) ? validation_errors()
: $this->session->flashdata('message');
$this->data['identity'] = array('name' => 'identity',
'id' => 'identity',
'type' => 'text',
'value' => $this->form_validation->set_value('identity'),
);
$this->data['password'] = array('name' => 'password',
'id' => 'password',
'type' => 'password',
);
}
}
credo di aver rimosso o commentato eventuali reindirizzamenti che erano lì. Quindi non so perché cerca di caricare ancora la vista? Ha qualcosa a che fare con jQuery Mobile che cerca di navigare lì perché pubblico su quell'URL?
Ok, grazie. In realtà non è un servizio web, è solo un plugin per CodeIgniter. Ho ottenuto qualcosa come il tuo esempio di lavoro però.L'unico problema è che quando pubblico un account/login (il metodo di login nel controller account), accede, ma finisce anche cercando di navigare verso un account/login di visualizzazione. Non lo voglio Voglio semplicemente restituire un valore (ne faccio eco uno nel metodo di accesso), ma anche se il valore viene restituito, tenta comunque di navigare anche nella pagina di accesso ... Vedi il mio aggiornamento. – Anders
L'ho capito, quindi funziona ora. Grazie. – Anders
Quindi, chi lo vede in futuro sa, qual è stata la soluzione? – Jasper