web-dev-qa-db-fra.com

Passage de connexion utilisateur dans iframe

J'ai deux sites Joomla (presque) similaires (mêmes utilisateurs, configuration, etc.) formant un Intranet.

Un site est intégré sur l'autre à l'aide d'un iframe et j'ai besoin que l'utilisateur soit connecté aux deux instances.

Comment éviter que l'utilisateur ait à se connecter sur les deux sites? En d'autres termes: comment puis-je obtenir que l'utilisateur soit automatiquement connecté à l'iframe en fonction du site Web parent?

Voici ce que j'ai essayé jusqu'à présent:

Ce code est exécuté sur le parent (non-iframe)

<?php
$user = JFactory::getUser();
$name = $user->username;
$pw = $user->password;
?>
<iframe height="500px" width="100%" src="http://[myurl]/Joomla-Test/pw?n=<?php echo $name;?>&p=<?php echo $pw; ?>"></iframe>

Ce code est exécuté sur l'enfant (iframe)

<?php
$name = $_GET["n"];
$pw = $_GET["p"];

$credentials = array();
$credentials['username'] = $name;
$credentials['password'] = $pw;

$options = array();
$options['remember'] = (bool) "false";

$app = JFactory::getApplication();

$app->login($credentials, $options)
?>

N'oubliez pas qu'il s'agit d'un intranet fermé. La sécurité n'est donc pas un problème. Ce que cela est censé faire, c'est transmettre le nom d'utilisateur et le mot de passe crypté en tant que paramètres GET à l'iframe (mêmes utilisateurs et mêmes mots de passe), puis vous connecter à l'aide de ces paramètres.

Mais la JFactory::getApplication()->login() renvoie toujours faux (la connexion a échoué).

Comment puis-je correctement implémenter cela?

Edit:

Je pense que cela pourrait être réalisé en passant le nom d'utilisateur et le mot de passe crypté à la bonne fonction au bon moment. Je ne sais pas quelle fonction utilise le mot de passe crypté ni à quel moment le mot de passe est crypté.

Est-ce que quelqu'un avec une meilleure connaissance de Joomla Codebase peut me diriger dans la bonne direction?

2
maikwuerth

Ce que vous avez présenté dans votre question n’est certainement pas la manière de le faire.

Une solution serait d'avoir des sessions d'utilisateurs partagées pour les 2 sites. Il y a des extensions qui pourraient vous aider avec ceci:

https://extensions.joomla.org/extensions/extension/core-enhancements/multiple-sites/multisites-single-sign-in-for-domains/

https://alterbrains.com/joomla-extensions/administration/multisites-manager

Une autre approche pourrait consister à écrire des plugins d’authentification d’utilisateur personnalisés pour les sites principal et iframe, et créer une communication entre eux. Ainsi, une fois que l’utilisateur se connectera au site principal, votre plugin communiquera avec l’autre site pour déclencher l’utilisateur. l’authentification également - et il devrait en être de même pour la déconnexion.

Je ne l'ai pas essayé et il est aussi tard pour le penser - mais en théorie, une solution de ce genre pourrait fonctionner.

1
FFrewin