web-dev-qa-db-fra.com

Comment se connecter à Joomla 3.x à partir d'un script externe

J'espère que vous pourrez m'aider pour trouver une solution.

Sur le site1, j'ai une installation Joomla 3.x. Je veux exécuter un script externe qui valide un utilisateur sur site2 (cela fonctionne déjà).

Après avoir obtenu une réponse positive de la part de site2, le nom d'utilisateur est renvoyé au script site1 de Joomla (ou, le cas échéant, à un deuxième script sur site1).

Maintenant, ce que je dois faire est de vérifier sur site1 si ce nom d'utilisateur existe dans la base de données Joomla. Si la valeur est true, l'utilisateur doit être connecté à Joomla et redirigé vers une URL. Si ce n'est pas le cas, l'utilisateur doit être créé dans Joomla avec un mot de passe aléatoire, puis connecté.

J'ai essayé le tutoriel d'authentification plugin, mais cela ne m'a pas aidé. J'ai aussi essayé ce script, mais cela n'a pas fonctionné aussi: https://Gist.github.com/AdamMadrzejewski/020c4fa4b1d0e7af78b8

Des idées pour connecter un utilisateur à Joomla à partir d'un script externe?

Merci!

1
JoomlaRookie11

Ceci est une réponse assez tardive mais peut aider quelqu'un.

Si vous souhaitez connecter un utilisateur à partir de Joomla lui-même, car le site 1 est Joomla, vous pouvez obtenir son ID utilisateur et utiliser la méthode suivante pour vous connecter si un identifiant d'utilisateur existe autrement. Vous devez d'abord enregistrer l'utilisateur à l'aide du modèle d'enregistrement.

function _forceLogin($userId)
{
    $user = JFactory::getUser($userId);
    if ($user->guest) {
        return 'guest';
    } else {
        //Will authorize you as this user.
        JPluginHelper::importPlugin('user');
        $options = array();
        $options['action'] = 'core.login.site';
        $response = new stdClass();
        $response->username = $user->username;
        $response->language = '';
        $response->email = $user->email;
        $response->password_clear = '';
        $response->fullname = '';
        $result = JFactory::getApplication()->triggerEvent(
            'onUserLogin', array((array)$response, $options)
        );
        return $result;
    }
}

C'est la seule façon de vous connecter, car si vous ne l'utilisez pas, votre utilisateur sera connecté, mais la session de l'utilisateur ne sera pas mise à jour.

Aussi, si vous avez trouvé une meilleure solution, partagez-la ici.

1
Pratyush