detecter quand utilisateur change/ré-initilise son mots passe

Réduire
Ce sujet est fermé.
X
X
 
  • Filtrer
  • Heure
  • Afficher
Tout effacer
nouveaux messages

  • [RÉGLÉ] detecter quand utilisateur change/ré-initilise son mots passe

    Bonjour, je cherche dans Joomla le moyen de détecter quand l'utilisateur change/ré-initialise son mots passe.

    Des que l'utilisateur change son mots de passe ou le ré-initialise je veut juste lancer une fonction php mafonction(); elle n'a pas de paramètre.

  • #2
    Re : detecter quand utilisateur change/ré-initilise son mots passe

    Bonjour sazearte,

    Il existe deux événements qui peuvent être utilisés dans un plugin pour détecter le changement de mot de passe d'un utilisateur :
    Amicalement,
    Rajoz

    Commentaire


    • #3
      Re : detecter quand utilisateur change/ré-initilise son mots passe

      Je débute avec Joomla, je comprend pas trop comment faire.

      1) je crée un fichier monplugin.php dans /plugin/user

      2) dedans je mets ce code la ?

      Code:
      // no direct access
      defined( '_JEXEC' ) or die( 'Restricted access' );
      
      // Import library dependencies
      jimport('joomla.plugin.plugin');
      
      
          function onUserAfterSave ($user, $isnew, $success, $msg) 
          {
              if (!$success) 
              {
                  return false;
              }
              if ($isnew) 
              {
      // je lance ma fonction
      mafonction();
              }
          }
      Mais dans ce cas la fonction se lance des que l'utilisateur mets a jour n'importe quoi (nom, email...) mais moi je veut que le mots de passe.

      Commentaire


      • #4
        Re : detecter quand utilisateur change/ré-initilise son mots passe

        Bonjour sazearte,

        Une documentation sur le développement d'un plugin (création d'un package installable, fichier XML, fichier PHP) se trouve sur https://docs.joomla.org/J3.x:Creatin...gin_for_Joomla ou en français sur http://cocoate.com/fr/jdevfr/plugin (merci Simon).

        L'événement onUserBeforeSave comporte les données d'utilisateur avant ($oldUser) et après ($newUser) ainsi qu'un paramètre ($isnew) indiquant s'il s'agit d'une création d'un nouvel utilisateur (true) ou d'une mise à jour d'un utilisateur existant (false).

        Pour une mise à jour, il est possible de comparer les mots de passe avant et après pour voir s'il est modifié.

        La documentation de l'événement (voir post précédent) indique une autre possibilité pour savoir si le mot de passe a été modifié ou pas :
        If the user has just changed the password, you may retrieve the cleartext password from $newUser['password_clear']. (It will be set to "" if the password has not been changed.)
        Amicalement,
        Rajoz

        Commentaire


        • #5
          Re : detecter quand utilisateur change/ré-initilise son mots passe

          Je me suis mal exprimé, je comprend comment on crée le plugin, c'est l'utilisation des événements onUserBeforeSave et onUserAfterSave que je comprend pas, je sais comment les manipulés ?

          Dois-je juste faire $newUser=onUserAfterSave(); pour récupérer les anciennes info de l'utilisateur ?

          D'après l'exemple j'ai juste a mettre ce bout de code, et a chaque mise a jour ma fonction se lancera.
          Code:
          public function onUserAfterSave($user, $isnew, $success, $msg) 
           	{ 
           		$app = JFactory::getApplication(); 
          
            
           		if (!$isnew) { 
           			mafonction();
          		} 
          	}
          Dernière édition par sazearte à 28/02/2015, 14h37

          Commentaire


          • #6
            Re : detecter quand utilisateur change/ré-initilise son mots passe

            Bonjour sazearte,

            Un plugin est un petit programme qui permet de réagir à des événements prédéfinis déclenchés par des extensions. Quand l'extension appelle l'événement et qui lui passe les paramètres, la méthode du plugin avec le même nom que l'événement sera appelée automatiquement.

            Le code du PHP du plugin pour le groupe User et l'événement
            onUserBeforeSave pourrait être le suivant. Je ne l'ai pas testé, il faudrait par exemple vérifier par des var_dump le contenu de $isnew et $newUser dans les différents cas possibles (création/modification d'utilisateur, modification ou pas du mot de passe). J'ai laissé les commentaires au format habituel de Joomla pour que ça soit lisible. Le nom du plugin <PluginName> est à définir dans le code.
            Code PHP:
            <?php

            // no direct access
            defined'_JEXEC' ) or die( 'Restricted access' ); 

            class 
            plgUser<PluginName> extends JPlugin
            {
                
            /**
                * Load the language file on instantiation. Note this is only available in Joomla 3.1 and higher.
                * If you want to support 3.0 series you must override the constructor
                *
                * @var    boolean
                * @since  3.1
                */
                
            protected $autoloadLanguage true;

                
            /**
                * Method is called before user data is stored in the database
                *
                * @param  array    $oldUser  Holds the old user data.
                * @param  boolean  $isnew    True if a new user is stored.
                * @param  array    $newUser  Holds the new user data.
                *
                * @return   boolean
                *
                */
                
            public function onUserBeforeSave($oldUser$isnew$newUser)
                {
                    if (!
            $isnew && $newUser['password_clear'] !== "")
                    {
                        
            // code à exécuter quand une modification de mot de passe va avoir lieu
                    
            }
                    return 
            true;    
                }
            }
            Amicalement,
            Rajoz

            Commentaire


            • #7
              Re : detecter quand utilisateur change/ré-initilise son mots passe

              code à exécuter quand une modification de mot de passe va avoir lieu
              Moi c'est après la modification du mots de passe que je veut agir, pas avant, a moins que j'ai mal compris ?

              Commentaire


              • #8
                Re : detecter quand utilisateur change/ré-initilise son mots passe

                Bonjour sazearte,

                Désolé, je n'ai pas été assez clair, j'aurai dû dire : "code à exécuter quand une modification de mot de passe va être enregistrée".

                En résumé, l'ordre du processus est le suivant :
                1. saisie des nouveaux éléments de l'utilisateur (ex. le mot de passe)
                2. déclenchement de onUserBeforeSave (avant enregistrement utilisateur)
                3. enregistrement des nouveaux éléments
                4. déclenchement de onUserAfterSave (après enregistrement utilisateur)

                L'intérêt de onUserBeforeSave c'est que la suite va dépendre de sa valeur de retour. Si elle est true l'enregistrement va se faire. Si elle est false l'enregistrement est annulé.
                Cela permet, par exemple, de tester le contenu de l'enregistrement et de le rejeter si quelque chose n'est pas satisfaisant.
                Dans l'exemple de code j'ai mis return true; pour que l'enregistrement se poursuive.

                Comme indiqué dans la documentation, dans onUserAfterSave les anciennes données qui viennent juste d'être mises à jour ne sont plus disponibles, donc pas possible de savoir si le mot de passe a été modifié. Cet événement aurait pu être utilisé si tu avais seulement voulu savoir s'il y avait eu mise à jour de l'utilisateur.

                Amicalement,
                Rajoz

                Commentaire


                • #9
                  Re : detecter quand utilisateur change/ré-initilise son mots passe

                  Dans mon cas, je dois utiliser onUserAfterSave.

                  Pour que cela fonctionne j'ai juste a modifier onUserBeforeSave par onUserAfterSave et c'est tout, ou faire autre chose ?

                  Commentaire


                  • #10
                    Re : detecter quand utilisateur change/ré-initilise son mots passe

                    Bonjour sazearte,

                    Dans mon cas, je dois utiliser onUserAfterSave
                    Est-ce indiscret de demander pourquoi ?

                    onUserAfterSave ne permet pas de récupérer les anciennes données de l'utilisateur donc on ne peut pas savoir si le mot de passe a été changé. On peut seulement savoir s'il s'agit d'un nouvel utilisateur ou d'un utilisateur modifié (paramètre $isnew).

                    Pour que cela fonctionne j'ai juste a modifier onUserBeforeSave par onUserAfterSave et c'est tout, ou faire autre chose ?
                    Les paramètres passés aux deux événements onUserBeforeSave et onUserAfterSave ne sont pas les mêmes (voir les docs indiquées plus haut), il faut donc aussi adapter le code en conséquence.

                    Amicalement,
                    Rajoz

                    Commentaire


                    • #11
                      Re : detecter quand utilisateur change/ré-initilise son mots passe

                      Si l'utilisateur a changé son mots de passe Joomla, il doit aussi le changer pour un autre programme externe a Joomla.

                      Le problème c'est que l'on peut pas connaître le mots de passe d'un utilisateur Joomla, l'utilisateur doit donc le re-entrer pour synchroniser le compte des 2 programmes.

                      Commentaire


                      • #12
                        Re : detecter quand utilisateur change/ré-initilise son mots passe

                        Bonjour sazearte,

                        Le problème c'est que l'on peut pas connaître le mots de passe d'un utilisateur Joomla, l'utilisateur doit donc le re-entrer pour synchroniser le compte des 2 programmes.
                        Dans la documentation de l'événement onUserBeforeSave il y a $newUser['password_clear'] que je traduis par "nouveau mot de passe en clair". A tester pour voir s'il peut être utilisé pour la synchronisation avec un autre programme. C'est aussi pour cela que j'indiquais de faire les var_dump de $newUser.

                        Amicalement,
                        Rajoz

                        Commentaire


                        • #13
                          Re : detecter quand utilisateur change/ré-initilise son mots passe

                          Merci, je teste et je te tien au courant.

                          Commentaire


                          • #14
                            Re : detecter quand utilisateur change/ré-initilise son mots passe

                            Je viens de me rendre compte que l'ancien développeur n'a pas fait de plugin ou de module, il a juste crée un include avec tous le code de synchronisation dans un seul fichier.

                            Peut on utiliser la fonction onUserBeforeSave en dehors d'un plugin ? car la transformation de son caca en vrai plugin prendrait beaucoup trop de temps, ce dont je ne dispose pas malheureusement pas pour terminer le projet qu'on ma confié.

                            Commentaire


                            • #15
                              Re : detecter quand utilisateur change/ré-initilise son mots passe

                              Bonsoir sazearte,

                              Peut on utiliser la fonction onUserBeforeSave en dehors d'un plugin ?
                              Réponse = non

                              Pour info, il existe un composant JFusion qui permet de réaliser l'intégration des utilisateurs Joomla et de logiciels externes.
                              Il comporte des plugins pour des logiciels comme Docuwiki, Magento, Mediawiki, Moodle, Phpbb, SMF, Vbulletin, Wordpress, etc.
                              Il a aussi un plugin "universel" qui permet en théorie de synchroniser avec n'importe quel logiciel reposant sur une base de données. Pas forcément simple à utiliser, mais peut-être moins compliqué que le code existant.


                              Amicalement,
                              Rajoz

                              Commentaire

                              Annonce

                              Réduire
                              Aucune annonce pour le moment.

                              Partenaire de l'association

                              Réduire

                              Hébergeur Web PlanetHoster
                              Travaille ...
                              X