Bonjour,
Je travaille actuellement sur une application s'appuyant sur Symfony 2 et avec laquelle je m'authentifie en utilisant les comptes d'un site Joomla installée en parallèle de mon application.
Via mon application Symfony j'arrive dans ma page de login à savoir si le login/password saisi appartient à un compte Joomla, ceci en utilisant les API Joomla :
En cas de succès, dans le code précédent je créé une session JUser avec l'objet utilisateur $jUser retourné par l'API Joomla : $session->set("JUser", $jUser);.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37 use \JFactory; define( '_JEXEC', 1 ); define( 'JPATH_BASE', realpath(dirname(__DIR__).'/../../../..') . DIRECTORY_SEPARATOR . 'joomla1'); define( 'DS', DIRECTORY_SEPARATOR ); require_once ( JPATH_BASE .DS.'includes'.DS.'defines.php' ); require_once ( JPATH_BASE .DS.'includes'.DS.'framework.php' ); ... // L'initialisation de JFactory démarre le contexte de session $mainframe = JFactory::getApplication("site"); $session = $this->get('request')->getSession(); if (!$session->has("JUser")) { // Authentification non-effectuée $request = Request::createFromGlobals(); if ($request->getMethod() == "POST") { $username = $request->request->get("login-username", null);; $password = $request->request->get("login-password", null); $credentials = array("username"=>$username, "password"=>$password); // Initialise l'application Joomla $mainframe->login($credentials); $jUser = JFactory::getUser(); if ($jUser->id != 0) { // Authentification réussie $session->set("JUser", $jUser); $twigTemplate = "CosialisITMBundle:Default:home.html.twig"; } else { $session->getFlashBag()->add("error", "Nom d'utilisateur ou mot de passe incorrect..."); } } } return $this->render($twigTemplate, $twigParameters);
Puis je redirige vers ma template Home qui affiche le nom de l'utilisateur dans la topbar du haut. J'ai mon contrôleur de la topbar qui fait :
A ce moment je récupère bien l'objet $jUser récupéré dans ma session et je peux afficher son nom dans ma topbar
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9public function indexAction() { $session = $this->get('request')->getSession(); $jUser = $session->get("JUser"); return $this->render('CosialisITMBundle:TopBar:index.html.twig', array("name"=>$jUser->name)); }
Cela se gatte,, lorsque je clique sur une autre route de ma page d'accueil ou à ce moment là le code ci-dessus ne me retourne plus mon objet $jUser à partir de ma session lorsque je repasse dans mon contrôleur topbar.
Cela faisait comme-ci mes sessions avaient été détruites ou comme ci j'avais changé de contexte de session (entre Symfony et Joomla peut-être) ?...
Peut-être aussi un problème de route ou je passerai entre le contexte de dev et le contexte de prod ?...
Merci par avance pour votre aide et informations







Répondre avec citation
Partager