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:
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 //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 } });
Mais ça ne fonctionne pas, si l'utilisateur n'est pas authentifié, le firewall lance une exception.
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 } }
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()
Partager