IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Symfony PHP Discussion :

requete Ajax et redirection [2.x]


Sujet :

Symfony PHP

  1. #1
    Membre émérite
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    725
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juin 2011
    Messages : 725
    Par défaut requete Ajax et redirection
    Bonjour,

    Sur une application utilisant FOSUserBundle, je souhaiterait personnaliser la page de login si la demande provient d'une requete Ajax.
    je voudrais notamment modifier le code status de la reponse http pour pouvoir traiter globalement tout les appels Ajax qui échouent pour cause d'expiration de session.
    mon code coté client avec jQuery:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    //monBundleQuiExtendFOSUSerBundle\resources\public\js\security.js
    //function lancée pour toutes les erreurs ajax de l'application
    $(document).ajaxError(	function(event, jqXHR, ajaxSettings, thrownError){
    				if(jqXHR.status==401){
    				  var content=jqXHR.responseText
    				  alert('vous êtes déconnecté');
    				  //proposer une reconnexion
    				 }
    			});
    ce que je pensais faire était de simplement redéfinir loginAction de securityController

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    //monBundleQuiExtendFOSUSerBundle\Controller\SecurityController
    class SecurityController extends \FOS\UserBundle\Controller\SecurityController {
    public function loginAction() {
        $response = parent::loginAction();    
        if($this->get('request')->isXmlHttpRequest()){      
          $response->setStatusCode(401);
          $response->setContent($unTemplateDeConnexionSansLayout);
        }    
        return $response;//renvoit le formulaire de connexion
      }
    }
    Mais ça ne fonctionne pas, si l'utilisateur n'est pas authentifié, le firewall lance une exception.
    Cette exception est interceptée et renvoit une RedirectResponse vers la route du login.
    Si bien que l'objet Request qui est traité dans mon controlleur n'est pas la requete Ajax initiale mais une requete de redirection par symfony.

    Ya t'il un moyen de récupérer la requete précédente du type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $this->container->get('request')->getPreviousRequest()->isXmlHTTPRequest()

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    319
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 319
    Par défaut
    Salut,

    J'ai géré le cas avec un listener sur exception. Si tu as une exception de type access denied et que c'est une requete ajax, alors on ne redirige pas vers la page /login (comportement par défaut), mais on renvoie une réponse json avec un code erreur 403.

    Tu comprendras mieux avec le code : https://github.com/winzou/AssoManage...onListener.php

    Je trouve que c'est propre comme solution, mais il y a peut-être mieux je sais pas.

  3. #3
    Membre émérite
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    725
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juin 2011
    Messages : 725
    Par défaut
    Merci beaucoup pour la qualité et la rapidité de tes réponses.

    En effet ça fonctionne bien et ça m'a permis de mieux comprendre les Events et les listeners.
    En fait dés que l'on ajoute une réponse à l'Event, cela stoppe la propagation de l'Event Exception aux autres listener

    En revanche, il faut penser à modifier la priorité du Listener.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AJAX] Requete Ajax : accents
    Par Romalafrite dans le forum AJAX
    Réponses: 2
    Dernier message: 11/05/2009, 11h35
  2. [AJAX] Temporisation requete AJAX
    Par cerede2000 dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 07/06/2007, 10h00
  3. [AJAX] deux requetes ajax dans une même page
    Par mitmit dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 02/05/2007, 12h52
  4. champs qui s'efface lors d'une requete ajax.
    Par starr dans le forum Langage
    Réponses: 3
    Dernier message: 27/10/2006, 08h33
  5. activer mod_proxy pour les requetes ajax
    Par xtaze dans le forum Apache
    Réponses: 1
    Dernier message: 17/05/2006, 17h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo