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 :

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);
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);.

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 :

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));
    }
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

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