L'authentification en jQuery Mobile et PhoneGap
J'ai une application web construit avec jQuery Mobile et PHP (CodeIgniter framework). Maintenant, je vais essayer de faire un PhoneGap version de celui-ci, pour en faire distribuable comme une application autonome. Cependant, le PHP web app. version utilise Ion Auth, un CodeIgniter plug-in pour l'authentification. Donc, quand vous allez à une page qui nécessite une authentification, l'application vous redirige vers le contrôleur de l'authentification de la méthode d'identification. Et après authentification, il vous redirige vers la page d'accueil (le jQuery Mobile de la page dans ce cas). Cela fonctionne bien dans la web app., depuis la page d'accueil est ouvert par le contrôleur de la maison, en premier lieu, de toute façon.
Mais voici l'essentiel: dans le PhoneGap version, la "page d'accueil" doit être l'index.html fichier dans PhoneGap. Apparemment, vous pouvez charger une autre url de démarrage en ajoutant une valeur de PhoneGap.plist, mais qui n'est pas acceptable par apple pour la soumission à l'app store. Et si je fais une redirection lors de l'authentification, je ne peux pas revenir à la index.html fichier après l'authentification...
Alors, comment doit-on aller sur l'authentification dans un PhoneGap/jQuery Mobile app?
Mise à JOUR:
J'ai essayé cette selon l'une des réponses, mais l'application tente encore de naviguer sur le compte/page de login (qui n'existe pas), quand je veux juste de connexion par le biais de la poste et de retourner une valeur à partir de la méthode:
$('#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");
}
});
});
Voici la méthode de contrôleur:
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',
);
}
}
Je pense que j'ai supprimé ou commentés toutes les redirections qui étaient là. Donc, je ne sais pas pourquoi il essaie de charger la vue encore? A-t-elle quelque chose à voir avec jQuery Mobile en essayant d'y accéder parce que je poste pour que l'url?
Vous devez vous connecter pour publier un commentaire.
Vous pouvez en faire la demande auprès de votre service web (Ion Auth) à partir de votre application. avec jQuery. Votre login ressemblerait à quelque chose comme ceci:
$(this).serialize()
va ajouter le formulaire de connexion de données à la requête post. Cet exemple suppose que votre web-service sera de retour JSON.event
argument dans votre gestionnaire d'événements, dont l'exemple ci-dessus ne fonctionne pas.La raison que votre formulaire est toujours la soumission et c'est d'essayer de changer de pages, c'est parce que vous avez une erreur de syntaxe dans votre gestionnaire de soumission de Javascript. Sur la ligne deux,
event
n'est pas définie de manière à essayer d'appelerevent.preventDefault()
erreurs. Bien que le gestionnaire ne, le navigateur encore soumet le formulaire à l'aide de son défautaction
etmethod
.Changer votre signature de fonction à
function(event) {
ou tout simplement le retour de faux à partir de la fonction. De retourfalse
est équivalent à la prévention de la valeur par défaut.response == true
. Vous êtes à la vérification de truthy/falsy valeurs à partir d'un script côté serveur qui peut potentiellement envoyer quelque chose que vous n'êtes pas attend (par exemple, une page d'erreur plutôt que le résultat attendu). Je voudrais simplement vous recommandons d'utiliser===
pour vous assurer d'obtenir exactement ce que vous attendez.Avez-vous regardé Plugin PhoneGap: ChildBrowser (iPhone, Android, autres) et de ses locChanged méthode?
Je ne l'ai codé les applications qui utilisent le protocole OAuth (Application Twitter) et OpenID (Applaudir App) pour PhoneGap /Android, mais l'enfant plugin de navigateur a ce qu'il faut pour ceux. Les sons tels que l'Ion Auth peut être semblable: après auth piloté par le fournisseur, de retour utilisateur à l'application de façon transparente.