Authentifizierung in jQuery Mobile und PhoneGap
Ich habe eine web-Anwendung mit jQuery Mobile und PHP (CodeIgniter framework). Jetzt bin ich versucht zu machen, eine PhoneGap-version von es als gut, um es verteilbar als standalone-app. Jedoch, die PHP-web-app. version nutzt Ionen-Auth, eine CodeIgniter-plugin für die Authentifizierung. Also, wenn Sie gehen zu einer Seite, die eine Authentifizierung erfordert, wird die app leitet Sie an den controller Authentifizierung login-Methode. Und nach der Authentifizierung leitet es Sie zurück auf die Startseite (die jQuery-Mobile-Seite in diesem Fall). Dies funktioniert gut in der web-app., da die home-Seite geöffnet ist die home-Controllers in den ersten Platz sowieso.
Aber hier ist der Haken: in der PhoneGap-version, der "home" Seite zu sein, muss index.html Datei PhoneGap. Anscheinend kann man laden einer anderen url auf Start, indem ein Wert in PhoneGap.plist, aber das ist nicht in Ordnung von apple für das Einreichen von app store. Und wenn ich eine Umleitung in der Authentifizierung, die ich nicht bekommen kann zurück zu den index.html Datei nach der Authentifizierung...
So, wie sollte man die Authentifizierung in einer PhoneGap/jQuery Mobile app?
UPDATE:
Habe ich versucht, diese nach einem von den Antworten, aber die app noch versucht, navigieren Sie zu dem Konto - /login-Seite (welche nicht existiert), wenn ich nur wollen, melden Sie sich über die post und einen Wert zurückgeben von der Methode:
$('#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");
}
});
});
Hier ist die controller-Methode:
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',
);
}
}
Ich glaube, ich habe entfernt oder auskommentiert alle Weiterleitungen, die dort waren. Also ich weiß nicht, warum es versucht zu laden, die anzeigen noch? Hat es etwas zu tun mit jQuery Mobile versuchen, zu navigieren, gibt es da poste ich zu dieser url?
InformationsquelleAutor Anders | 2011-11-10
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie die Anforderungen an Ihren web-service (Ionen-Auth) aus Ihrer app. mit jQuery. Ihre Anmeldung würde in etwa so Aussehen:
$(this).serialize()
wird das login-Formular die Daten an die post-Anfrage. In diesem Beispiel wird davon ausgegangen, dass web service JSON zurückgeben.Als ich es herausgefunden, es funktioniert also jetzt. Danke.
So Leute, die sehen das in der Zukunft wissen, was war deine Lösung?
Für andere Fragen, warum es nicht funktioniert hat, wie es aussieht, function () fehlt die variable. Es sollte function (event) in der zweiten Zeile.
Das ist nur der Fall, wenn Sie versuchen, verwenden Sie die
event
argument in der Ereignisprozedur, die dem oben genannten Beispiel nicht.InformationsquelleAutor Jasper
Der Grund ist das Formular noch Absenden und es versucht, um die Seiten zu wechseln ist, weil Sie einen syntax Fehler in deinem submit-handler von Javascript. In Zeile zwei,
event
ist nicht so definiert werden, dass Sie versuchen zu nennenevent.preventDefault()
Fehler. Obwohl die handler fehlschlägt, wird der browser immer noch sendet das Formular mit der defaultaction
undmethod
.Entweder ändern Sie Ihre Funktion Unterschrift zu
function(event) {
oder einfach false zurückgeben von der Funktion. Rückkehrfalse
ist äquivalent zu verhindern default.Watch-out:
response == true
. Sie überprüft truthy/falsy-Werte von einem server-side script, die potenziell senden Sie etwas, was Sie nicht erwarten, (z.B. eine Fehlerseite statt der erwarteten Ausgabe). Ich würde nur empfehlen, mit===
um sicherzustellen, dass Sie genau das bekommen, was Sie erwarten.InformationsquelleAutor Jeffrey D. Hoffman
Haben Sie sich PhoneGap-Plugin: ChildBrowser (iPhone, Android, andere) und seine locChanged Methode?
Habe ich nur codiert apps, die OAuth verwenden (Twitter App) und OpenID (Applaudieren App) für PhoneGap /Android, aber das Kind browser-plugin hat, was nötig ist, für diese. Klingt wie Ionen-Auth kann es ähnlich sein: nach auth getrieben durch Anbieter, Benutzer wieder zu app nahtlos.
InformationsquelleAutor Libby