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
9 public 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
Partager