Erreur 'class' non trouvée suite à la création d'un plugin d'authentification

Réduire
X
 
  • Filtrer
  • Heure
  • Afficher
Tout effacer
nouveaux messages

  • Erreur 'class' non trouvée suite à la création d'un plugin d'authentification

    Bonjour,
    J'ai crée un nouveau plugin d'authentification appelé 'Myauth' avec en support : https://docs.joomla.org/J4.x:Creatin...gin_for_Joomla.
    Les sous répertoires 'services' et 'src' avec les composants qui vont bien.
    Tout ceci packagé et installé.
    J'active le plugin mais suite à une nouvelle connexion en admin j'ai l’erreur suivante :

    Une erreur est survenue

    0 Class "Joomla\Plugin\Authentication\Myauth\Extension\Mya uth" not found

    Call stack
    # Function Location
    1 () JROOT/plugins/authentication/myauth/services/provider.php:47
    2 Joomla\DI\ServiceProviderInterface@anonymous/app/inq00/intranet/plugins/authentication/myauth/services/provider.php:30$17d->{closure}() JROOT/libraries/vendor/joomla/di/src/ContainerResource.php:182
    3 Joomla\DI\ContainerResource->getInstance() JROOT/libraries/vendor/joomla/di/src/Container.php:96
    4 Joomla\DI\Container->get() JROOT/libraries/src/Extension/ExtensionManagerTrait.php:177
    5 Joomla\CMS\Application\CMSApplication->loadExtension() JROOT/libraries/src/Extension/ExtensionManagerTrait.php:99
    6 Joomla\CMS\Application\CMSApplication->bootPlugin() JROOT/libraries/src/Plugin/PluginHelper.php:232
    7 Joomla\CMS\Plugin\PluginHelper::import() JROOT/libraries/src/Plugin/PluginHelper.php:192
    8 Joomla\CMS\Plugin\PluginHelper::importPlugin() JROOT/libraries/src/Authentication/Authentication.php:112
    9 Joomla\CMS\Authentication\Authentication->__construct() JROOT/libraries/src/Authentication/Authentication.php:132
    10 Joomla\CMS\Authentication\Authentication::getInsta nce() JROOT/libraries/src/Application/CMSApplication.php:821
    11 Joomla\CMS\Application\CMSApplication->login() JROOT/libraries/src/Application/AdministratorApplication.php:341
    12 Joomla\CMS\Application\AdministratorApplication->login() JROOT/administrator/components/com_login/src/Controller/DisplayController.php:82
    13 Joomla\Component\Login\Administrator\Controller\Di splayController->login() JROOT/libraries/src/MVC/Controller/BaseController.php:678
    14 Joomla\CMS\MVC\Controller\BaseController->execute() JROOT/libraries/src/Dispatcher/ComponentDispatcher.php:143
    15 Joomla\CMS\Dispatcher\ComponentDispatcher->dispatch() JROOT/administrator/components/com_login/src/Dispatcher/Dispatcher.php:45
    16 Joomla\Component\Login\Administrator\Dispatcher\Di spatcher->dispatch() JROOT/libraries/src/Component/ComponentHelper.php:361
    17 Joomla\CMS\Component\ComponentHelper::renderCompon ent() JROOT/libraries/src/Application/AdministratorApplication.php:143
    18 Joomla\CMS\Application\AdministratorApplication->dispatch() JROOT/libraries/src/Application/AdministratorApplication.php:186
    19 Joomla\CMS\Application\AdministratorApplication->doExecute() JROOT/libraries/src/Application/CMSApplication.php:293
    20 Joomla\CMS\Application\CMSApplication->execute() JROOT/administrator/includes/app.php:61
    21 require_once()​


    Qu'ai je oublié de déclarer ?

    Merci pour vos réponses
    Salutations
    Michel

  • #2
    Voici le contenu de mon fichier provider.php :

    <?php

    /**
    * @package Joomla.Plugin
    * @subpackage Authentication.joomla
    *
    * Copyright (C) 2023 Open Source Matters, Inc. <https://www.joomla.org>
    * @license GNU General Public License version 2 or later; see LICENSE.txt
    */

    defined('_JEXEC') or die;


    use Joomla\CMS\Extension\PluginInterface;
    use Joomla\CMS\Factory;
    use Joomla\CMS\Plugin\PluginHelper;
    use Joomla\Database\DatabaseInterface;
    use Joomla\DI\Container;
    use Joomla\DI\ServiceProviderInterface;
    use Joomla\Event\DispatcherInterface;
    use Joomla\Plugin\Authentication\Myauth\Extension\Myau th;

    echo "Bonjour : donc on y passe" ;
    echo "<br>";
    echo "153101l007wwd - /app/inq00/intranet/plugins/authentication/myauth/services/provider.php";
    //exit;



    return new class () implements ServiceProviderInterface {
    /**
    * Registers the service provider with a DI container.
    *
    * @param Container $container The DI container.
    *
    * @return void
    *
    * @since 4.3.0
    */
    public function register(Container $container)
    {
    $container->set(
    PluginInterface::class,
    function (Container $container) {
    $dispatcher = $container->get(DispatcherInterface::class);

    $plugin = new Myauth(
    $dispatcher,
    (array) PluginHelper::getPlugin('authentication', 'myauth')
    );
    $plugin->setApplication(Factory::getApplication());
    $plugin->setDatabase($container->get(DatabaseInterface::class));

    return $plugin;
    }
    );
    }
    };

    Commentaire


    • #3
      Le plugin s'appelle bien 'Myauth' sans le space ajouté de façon aléatoire lors du copié/collé

      Commentaire


      • #4
        Bonjour,

        Sauf erreur de ma part, il s'agit d'un problème de namespace.

        L'avez-vous défini dans votre xml d'installation ?

        Si vous regardez dans cookie.xml, il y a une ligne
        Code:
        <namespace path="src">Joomla\Plugin\Authentication\Cookie</namespace>

        Ensuite au niveau du Cookie.php, on retrouve en 1ere ligne
        Code:
        namespace Joomla\Plugin\Authentication\Cookie\Extension;

        D'autre part, s'agissant d'un plugin non Joomla, au niveau du namespace, il ne faut pas utiliser Joomla mais un nom qui vous est propre.

        Pascal
        If anything can go wrong, it will...If I can help, I will ..https://conseilgouz.com

        Commentaire


        • #5
          Bonjour,
          Merci pour ce message.

          Je vous envoie le myauth.xml et le myauth.php, je ne vois pas ce qui ne va pas !

          <?xml version="1.0" encoding="UTF-8"?>
          <extension type="plugin" group="authentication" method="upgrade">
          <name>Authentification - Myauth</name>
          <author>Joomla! Project modif mfe</author>
          <creationDate>2023-07</creationDate>
          <copyright>(C) 2005 Open Source Matters, Inc.</copyright>
          <license>GNU General Public License version 2 or later; see LICENSE.txt</license>
          <authorEmail>intranet.cti-sud@assurance-maladie.fr</authorEmail>
          <authorUrl>www.joomla.org</authorUrl>
          <version>3.0.0</version>
          <description>PLG_AUTHENTICATION_MYAUTH_XML_DESCR IP TION</description>
          <namespace path="src">Joomla\Plugin\Authentication\Myauth</namespace>
          <files>
          <folder plugin="myauth">services</folder>
          <folder>src</folder>
          </files>
          </extension>

          ************************
          <?php
          /**
          * @package Joomla.Tutorials
          * @subpackage Authentication.myauth
          *
          * Copyright Copyright (C) 2005 - 2020 Open Source Matters, Inc. All rights reserved.
          * @license GNU General Public License version 2 or later; see LICENSE.txt
          * Adaptation CLL - 07/07/2023
          */

          namespace Joomla\Plugin\Authentication\Myauth\Extension;

          use Joomla\CMS\Authentication\Authentication;
          use Joomla\CMS\Plugin\CMSPlugin;
          use Joomla\CMS\User\User;
          use Joomla\Event\SubscriberInterface;


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

          /**
          * Example Authentication Plugin for the Joomla Docs.
          *
          * @since 1.0
          */
          class PlgAuthenticationMyauth extends CMSPlugin implements SubscriberInterface
          {
          /**
          * Database object
          *
          * @var \Joomla\Database\DatabaseDriver
          * @since 1.0
          */
          protected $db;

          /**
          * Returns an array of events this subscriber will listen to.
          *
          * @return array
          *
          * @since 1.0
          */
          public static function getSubscribedEvents(): array
          {
          return [
          'onUserAuthenticate' => 'authenticate',
          ];
          }

          /**
          * 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.0
          */
          public function authenticate( $credentials, $options, &$response )
          {
          /*
          * Here you would do whatever you need for an authentication routine with the credentials
          *
          * In this example the mixed variable $return would be set to false
          * if the authentication routine fails or an integer userid of the authenticated
          * user if the routine passes
          */

          echo "Bonjour : donc on y passe" ;
          echo "<br>";
          echo "153101l007wwd - myauth.php";


          $query = $this->db->getQuery(true)
          ->select($this->db->quoteName('id'))
          ->from($this->db->quoteName('#__users'))
          ->where($this->db->quoteName('username') . ' = :username')
          ->bind(':username', $credentials['username']);

          $this->db->setQuery($query);
          $result = $this->db->loadResult();

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

          /**
          * To authenticate, the username must exist in the database, and the password should be equal
          * to the reverse of the username (so user joeblow would have password wolbeoj)
          */
          // On ne va pas controler le mot de passe
          //if($result && ($credentials['username'] == strrev( $credentials['password'] )))
          //{
          $email = User::getInstance($result); // Bring this in line with the rest of the system
          $response->email = $email->email;
          $response->status = Authentication::STATUS_SUCCESS;
          /*}
          else
          {
          $response->status = Authentication::STATUS_FAILURE;
          $response->error_message = 'Invalid username and password';
          }*/
          }
          }

          Commentaire


          • #6
            Essayez de modifier le nom de votre classe PlgAuthenticationMyauth en Myauth

            Ensuite, si vous regardez authentication/joomla, dans src/Extension/Joomla.php, il s'agit d'une final class.

            Pascal
            If anything can go wrong, it will...If I can help, I will ..https://conseilgouz.com

            Commentaire


            • #7
              Passage à : 'final class Myauth extends CMSPlugin' dans myauth.php mais toujours la même erreur sur le back end

              0 Class "Joomla\Plugin\Authentication\Myauth\Extension\Mya uth" not found

              JROOT/plugins/authentication/myauth/services/provider.php:47​

              Commentaire


              • #8
                au niveau de votre plugin, avez vous bien dans le répertoire plugins/authentication/myauth la structure:

                - myauth.xml
                - services/provider.php
                - src/Extension/Myauth.php

                Pascal
                If anything can go wrong, it will...If I can help, I will ..https://conseilgouz.com

                Commentaire


                • #9
                  Re bonjour,

                  Oui j'ai repris la même arborescence que l'authen 'cooki'e avec les droits qui vont biens !

                  Commentaire


                  • #10
                    Dernière évolution : - src/Extension/Myauth.php était en miniscule , j'ai modifié et maintenant une autre erreur

                    Call to undefined method Joomla\Plugin\Authentication\Myauth\Extension\Myau th::setDatabase()

                    JROOT/plugins/authentication/myauth/services/provider.php:52


                    Je regarde ce qu'il en est , mais déjà merci, ça avance !!!

                    Commentaire


                    • #11
                      Merci Pascal,
                      J'en ai assez pour aujourd'hui et reprendrai mes investigations demain.
                      Bonne fin de journée
                      Michel

                      Commentaire


                      • #12
                        Envoyé par Michel_F Voir le message
                        Dernière évolution : - src/Extension/Myauth.php était en miniscule , j'ai modifié et maintenant une autre erreur

                        Call to undefined method Joomla\Plugin\Authentication\Myauth\Extension\Myau th::setDatabase()

                        JROOT/plugins/authentication/myauth/services/provider.php:52


                        Je regarde ce qu'il en est , mais déjà merci, ça avance !!!
                        Dans Myauth.php,
                        Code:
                        use Joomla\Database\DatabaseAwareTrait;
                        use Joomla\CMS\User\UserFactoryAwareTrait;
                        class Myauth extends CMSPlugin {
                        use DatabaseAwareTrait;
                        use UserFactoryAwareTrait;

                        Pascal
                        If anything can go wrong, it will...If I can help, I will ..https://conseilgouz.com

                        Commentaire


                        • #13
                          Salut Pascal,

                          Merci pour ton aide !

                          J'ai maintenant l'erreur suivante :

                          syntax error, unexpected token "protected" : JROOT/plugins/authentication/myauth/src/Extension/Myauth.php:44

                          Il n'aime pas "Protected" , je l'ai commenté il fait ensuite une erreur sur "public function" !!!


                          Au regard de la doc de création du Plugin 'https://docs.joomla.org/J4.x:Creating_an_Authentication_Plugin_for_Joomla' , aurais-je loupé un truc ?

                          Michel​

                          Commentaire


                          • #14
                            Re bonjour,

                            Après correction une '{' oubliée, il y un pb sur le chargement de UserFactoryAwareTrait !

                            Attempted to load trait "UserFactoryAwareTrait" from namespace "Joomla\CMS\User".
                            Did you forget a "use" statement for another namespace?



                            Ci-après les 1ères lignes de Myauth.php
                            <?php
                            /**
                            * @package Joomla.Tutorials
                            * @subpackage Authentication.myauth
                            *
                            * Copyright Copyright (C) 2005 - 2020 Open Source Matters, Inc. All rights reserved.
                            * @license GNU General Public License version 2 or later; see LICENSE.txt
                            * Adaptation MFE 31/07/2023
                            */

                            namespace Joomla\Plugin\Authentication\Myauth\Extension;

                            use Joomla\CMS\Authentication\Authentication;
                            use Joomla\CMS\Plugin\CMSPlugin;
                            use Joomla\CMS\User\User;
                            use Joomla\Event\SubscriberInterface;

                            use Joomla\Database\DatabaseDriver;
                            use Joomla\Database\DatabaseAwareTrait;
                            use Joomla\CMS\User\UserFactoryAwareTrait;



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

                            /**
                            * Example Authentication Plugin for the Joomla Docs.
                            *
                            * @since 1.0
                            */

                            class Myauth extends CMSPlugin implements SubscriberInterface {
                            use DatabaseAwareTrait;
                            use UserFactoryAwareTrait;


                            Michel



                            Commentaire


                            • #15
                              Bonjour Michel,

                              Peux-tu faire un zip de ton plugin et me l'envoyer en MP ?

                              Pascal
                              If anything can go wrong, it will...If I can help, I will ..https://conseilgouz.com

                              Commentaire

                              Annonce

                              Réduire
                              Aucune annonce pour le moment.

                              Partenaire de l'association

                              Réduire

                              Hébergeur Web PlanetHoster
                              Travaille ...
                              X