web-dev-qa-db-fra.com

Comment tirer parti de l'API JSON externe REST dans Joomla 3.5.1 après la connexion de l'utilisateur?)

Je dois intégrer un site Web Joomla à un tiers REST. Permettez-moi de préciser ce que j'essaie de faire. Idéalement lorsqu'un utilisateur se connecte au site Web de Joomla une fois authentifié seront également en mesure d'accéder à un autre site Web, probablement via un lien sur le site Joomla, sans avoir à se connecter à nouveau à cet autre site. Il existe une API REST pour cet autre site disposant de plusieurs méthodes de connexion). comme un utilisateur unique, et c’est ce à quoi je pense que j’aurais besoin de passer un appel.

Je pense que cela fonctionnerait quelque chose comme ceci:

L’utilisateur se connecte au site Joomla, l’utilisateur est authentifié par Joomla. Maintenant, une fois l’utilisateur authentifié par le système Joomla, appelez l’API REST) et s’authentifiez auprès de celle-ci. Si l’authentification est correcte, stockez les informations correctes reçues de l’API, telles que AUTH TOKEN, etc. sinon nécessaire pour la connexion à un autre site, peut-être dans les variables de session ou sur la machine du client dans un cookie à utiliser lors de la tentative d'accès à un autre site. Je ne sais pas quelle est la bonne façon de faire cela et comment cela a été fait en théorie ou en pratique serait formidable. Je cherchais des informations, mais je ne trouve que beaucoup de gens qui discutent de la façon d’avoir une API REST pour votre site Web Joomla et non une beaucoup sur la façon de se connecter à une API externe REST à partir d'un site Joomla.

Lors de ma recherche de la bonne façon de procéder, je suppose que cela consiste à créer un plug-in comme le plug-in d'authentification d'utilisateur standard Joomla et à y ajouter cette fonctionnalité ou à créer un plug-in qui écoute l'événement approprié. Si je dois réellement créer un plug-in qui écoute les événements, je ne sais pas encore si je dois écouter la réponse onUserAuthenicate ou l'événement onUserLogin. Mais j'ai le sentiment que c'est l'un des deux. J'ai une idée de la façon d'utiliser la bibliothèque curl pour parler à l'API afin que je puisse comprendre comment je pourrais l'essayer.

Toute idée, exemple ou directive sur la façon de procéder serait grandement appréciée! Merci!

2
seamonkey

Vous devez créer un plugin d'authentification voir la documentation: https://docs.joomla.org/J3.x:Creating_an_Authentication_Plugin_for_Joomla/en et mon pseudo-code au dessous de

    <?php
    /**
     * @version    $Id: myauth.php 7180 2007-04-23 16:51:53Z jinx $
     * @package    Joomla.Tutorials
     * @subpackage Plugins
     * @license    GNU/GPL
     */

    // Check to ensure this file is included in Joomla!
    defined('_JEXEC') or die();

    /**
     * Example Authentication Plugin.  Based on the example.php plugin in the Joomla! Core installation
     *
     * @package    Joomla.Tutorials
     * @subpackage Plugins
     * @license    GNU/GPL
     */
    class plgAuthenticationMyauth extends JPlugin
    {
        /**
         * This method should handle any authentication and report back to the subject
         * This example uses simple authentication - it checks if the password is the reverse
         * of the username (and the user exists in the database).
         *
         * @access    public
         * @param     array     $credentials    Array holding the user credentials ('username' and 'password')
         * @param     array     $options        Array of extra options
         * @param     object    $response       Authentication response object
         * @return    boolean
         * @since 1.5
         */
        function onUserAuthenticate( $credentials, $options, &$response )
        {
            /*
             * Here you would do whatever you need for an authentication routinr with the credentials.Do your api call here with curl or an other method. Assume you API return an $result->success variable
 */

if (!$result->success) {
            $response->status = STATUS_FAILURE;
            $response->error_message = 'User does not exist';
        }

            $email = JUser::getInstance($result->username); // Bring this in line with the rest of the system
            $response->email = $email->email;
            $response->status = JAuthentication::STATUS_SUCCESS;

        }
    }
    ?>
1

Vous devez utiliser onUserAfterLogin comme déclencheur après une connexion réussie.

L'authentification est appelée pour vérifier les informations d'identification de connexion (vous pouvez par exemple l'utiliser pour bloquer la connexion d'utilisateurs ayant une adresse IP spécifique ou pour créer une connexion avec un courrier électronique.

1
Alexandr