2011-11-23 3 views
1

J'utilise AJAX dans mes applications web comme la recherche mais si l'utilisateur a été déconnecté, la fonction ajax ne retourne rien car la redirection (de l'action 'search' à l'action 'login') n'a pas été géré correctement.CakePHP 2 AJAX redirections

Est-il possible de redéclarer la méthode 'redirect' dans AppController pour rendre la bonne action lorsqu'une redirection est suspendue dans un appel AJAX?

Merci, Sébastien

Répondre

2

Je pense que le mieux serait de configurer vous ajax appeler pour répondre correctement à une réponse non valide. Comme il semble être une partie importante de votre application, je passerais une variable 'loggedin' avec chaque requête ajax, afin que le client puisse le dire dès que l'utilisateur a été déconnecté.

Mise à jour

Dans le cas où vous voulez garder un utilisateur connecté, il vous suffit de mettre le connecté/contrôle des cookies dans quelque chose comme votre AppController::beforeFilter() qui obtient exécuté avec chaque demande. par exemple:

public function beforeFilter() { 
    if($this->Auth->user() { 
      // USer is logged in, it's all gravy 
    } else { 
     // User is not logged in, try to log them in 
     $userData = $this->Cookie->read('User'); 
    if(!empty($userData)) { 
       // Function that grabs info from cookie and logs in user 
     } 
    } 
} 

De cette façon, il n'y aura pas de redirection que l'utilisateur sera connecté tant qu'ils ont un cookie.

+0

Mais je ne veux pas que l'utilisateur doive se reconnecter, j'ai une fonction de connexion automatique avec des informations cookie. Je veux que lorsque l'appel AJAX est fait, ce CakePHP vérifie si l'utilisateur est connecté et reconnecte automatiquement hif s'il ne l'est pas. –

+1

@ Sébastien voir ma mise à jour. – Dunhamzzz

+0

Ok, merci pour ça. Mais sachez que si un utilisateur "jamais connecté" se trouve dans une page publique et déclenche un événement AJAX nécessitant une connexion, il y aura une redirection vers la page de connexion dans cette méthode (pour l'appel non-ajax)). Ainsi, le retour AJAX sera vide (sans erreur); comment ne pas casser la méthode et faire une "pseudo-redirection" pour que la page de connexion soit renvoyée à l'appel AJAX? –

0

Une autre approche serait de permettre à chacun d'accéder à la fonction Ajax:

public function beforeFilter() { 
    $this->Auth->allow(array('my_ajax_method')); 
} 

Et puis vérifiez l'utilisateur est authentifié dans la méthode elle-même:

public function my_ajax_method() { 

    if (!$this->Auth->user()) { 
     //user not authenticated 
     $result = "requires auth"; 
    } 
    else { 
     // use is authenticated 
     // do stuff 
     $result = 'result of stuff'; 
    } 

    $this->set(compact('result')); 

} 

Vous aurez besoin de vérifier le résultat de l'appel ajax dans votre javascript et agir en conséquence.

+0

Cela n'est pas possible car la plupart de mes méthodes AJAX sont des méthodes "standard" avec une condition "$ this-> request-> is ('Ajax')". –