web-dev-qa-db-fra.com

phonegap: l'authentification basée sur les cookies (PHP) ne fonctionne pas [WebView]

Je travaille sur une application Web mobile utilisant sencha touch, HTML5 et phonegap comme wrapper.

J'utilise PHP-Authentication (Cookie) et ajax-request. Tout fonctionne bien sur safari ou chrome, mais après le déploiement avec phonegap (webview), cela ne fonctionne plus ...

Toute aide serait appréciée :)

Quelques détails supplémentaires:

Toutes les données de mon application sont chargées via des requêtes ajax adressées à mon composant serveur "mobile.php". J'utilise PHP-Auth de base pour authentifier l'utilisateur:

  1. AJAX-Request [nom d'utilisateur, mot de passe] -> mobile.php -> Session établie (cookie)
  2. Toutes les autres demandes si l'authentification a abouti

Quelle est la différence entre un site Web de safari normal et la vue Web?

27
meaku

je l'ai compris:

vous devez modifier le fichier phonegap_delegate.m et ajouter les éléments suivants à la méthode init:


- (id) init
{   
    /** If you need to do any extra app-specific initialization, you can do it here
     *  -jm
     **/
    //special setting to accept cookies via ajax-request
    NSHTTPCookieStorage *cookieStorage = [NSHTTPCookieStorage 
                                          sharedHTTPCookieStorage]; 
    [cookieStorage setCookieAcceptPolicy:NSHTTPCookieAcceptPolicyAlways]; 

    return [super init];
}

cela permet à webview d'accepter les cookies des requêtes ajax

27
meaku

Si vos demandes Phonegap AJAX ne déclenchent pas les rappels comme elles sont censées le faire, cela peut en être la raison.

Si la réponse que vous recevez tente de définir des cookies et que vous n'avez pas corrigé Michael, votre demande (jquery) AJAX échouera silencieusement - ni succès: ni erreur: les rappels seront déclenchés malgré le fait que le serveur a effectivement reçu la demande et envoyé une réponse. Il semble que vous deviez le faire même si vous ne vous souciez pas des cookies.

J'espère que ça aidera quelqu'un.

Je me fichais des biscuits, mais je passais juste quelques heures à essayer de comprendre pourquoi les rappels ne se déclenchaient pas!

2
NAD

Il existe une solution qui fonctionne aussi sur Android:

Installez le plugin https://github.com/wymsee/cordova-HTTP pour exécuter des requêtes HTTP (S) arbitraires.

Remplacez XMLHttpRequest par le plugin alternatif (cordovaHTTP.get ou cordovaHTTP.post):

cordovaHTTP.post("https://example.com/login", {email: '[email protected]', passwd: "s3cr3t"}, {}, function(response) {
    console.log('success');
    console.log(response);
}, function(response) {
    console.log('failure');
    console.log(response);
});

La réponse contiendra le statut, les données et response.headers["Set-Cookie"], pouvant être analysés pour le nom, la valeur, le domaine, le chemin d'accès et même les indicateurs HttpOnly ;-)

Ce cookie peut être enregistré dans LocalStorage et envoyé dans les demandes suivantes (voir le paramètre cordovaHTTP.setHeader() ou header des méthodes .get/.post) pour simuler un utilisateur authentifié sur un navigateur Web.

0
Ferdinand.kraft