Contexte session et authentification Joomla via Symfony
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:
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:
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 :ccool:
Cela se gatte, :cry:, 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