Création plugin simplifié d'authentification

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

  • Création plugin simplifié d'authentification

    Bonjour,

    Je voudrais créer un plugin me permettant de me connecter à mon site intranet automatiquement. Pour cela je récupère le REMOTE_USER que je passe dans la variable username mais je n'arrive pas à faire un select tout bête.
    J'ai écrit une classe dans laquelle je déclare une variable $db l'erreur est la suivante : "0 - Call to a member function getQuery() on null"

    Mon code est :
    Code PHP:
    class AutoMyauth {
    use 
    DatabaseAwareTrait;

    protected 
    $db;

    public function 
    onUserAuthenticate$credentials$options, &$response )
    {
    $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';
    }



    J'appelle cette classe dans l'index.php ainsi :
    Code PHP:
    $options = array();
    $credentials = array();
    $password "";
    $credentials['username'] = $username[0];
    $credentials['password'] = $password;
    $var = new AutoMyauth();
    $result $var->authenticate($credentials$options$response);
    $result = ($result) ? 0

    ​Si quelqu'un a une idée ?

    Merci !
    Dernière édition par lesoutier à 13/09/2023, 10h01

  • #2
    Ceci ne ferait pas l'affaire ?
    Automatically log in. Log into your Joomla site automatically by IP address. It can work for both the frontend and administrator areas of the site, based on your preference. You can simply set up
    Présentations : slides.woluweb.be | Coordonnées complètes : www.woluweb.be

    Un message d’erreur sur votre site Joomla... ayez le reflexe de consulter la base de connaissance : https://kb.joomla.fr

    Ce forum, vous l'aimez ? Il vous a sauvé la vie ? Vous y apprenez régulièrement ? Alors adhérer à l'AFUJ, l'Association Francophone des Utilisateurs de Joomla : https://www.joomla.fr/association/adherer

    Commentaire


    • #3
      Bonjour,

      $this->db est vide car non initialisé.

      Si vous regardez dans plugins/authentication, il y a le fichier services/provider.php. Ce fichier contient une ligne
      Code:
      $plugin->setDatabase($container->get(DatabaseInterface::class));
      avec un use Joomla\Database\DatabaseInterface; dans l'entête du fichier.

      Ensuite, la syntaxe utilisée pour récupérer le base est (en ligne 55 de src/Extension/Joomla.php) $db = $this->getDatabase();

      Dans votre cas, cela deviendra $this->db = $this->getDatabase();

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

      Commentaire


      • #4
        Merci Woluweb, mais cela ne répond pas à mes attentes.

        Commentaire


        • #5
          Merci Pascal mais cela ne fonctionne pas. Peut-être n'ai-je pas compris.
          J'ai bien le "use Joomla\Database\DatabaseInterface;" dans l'entête du fichier et j'ai rajouté l'instruction : $this->db = $this->getDatabase();

          $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']);​

          Commentaire


          • #6
            Y a-t-il un fichier services/provider.php pour votre plugin ?
            If anything can go wrong, it will...If I can help, I will ..https://conseilgouz.com

            Commentaire


            • #7
              Envoyé par pmleconte Voir le message
              Y a-t-il un fichier services/provider.php pour votre plugin ?
              oui, il existe bien, j'ai l'arborescence :
              Cliquez sur l'image pour l'afficher en taille normale

Nom : image.png 
Affichages : 96 
Taille : 2,0 Ko 
ID : 2054883
              puis dans services : provider.php
              sous src : Extension/automyauth.php

              Commentaire


              • #8
                Y a-t-il bien la ligne setDatabase et le use associé dans le fichier provider.php ?
                If anything can go wrong, it will...If I can help, I will ..https://conseilgouz.com

                Commentaire


                • #9
                  Envoyé par pmleconte Voir le message
                  Y a-t-il bien la ligne setDatabase et le use associé dans le fichier provider.php ?
                  oui, j'ai bien :
                  use Joomla\Database\DatabaseInterface;
                  et
                  $plugin->setDatabase($container->get(DatabaseInterface::class));

                  Commentaire


                  • #10
                    J'ai réglé le problème de variable non initialisée, mea culpa pas mis la commande dans le bon script ! Par contre autre erreur maintenant, il ne trouve pas la database. Malgré le rajout de "use Joomla\Database\DatabaseInterface;" dans l'entête du script (ce qui ne devrait pas être nécessaire puisque présent dans le provider.php).

                    Commentaire


                    • #11
                      Je sens que je me rapproche du but mais toujours des difficultés. Je crée un événement de mon plugin dans app.php juste avant l'execute de app.
                      Pour résumer, mon plugin est créé et activé. Il a comme arborescence /plugins/nom_groupe/nom_plugin/src/Extension/ pour le code php du plugin, puis nom_plugin/services pour le provider.php
                      Lorsque le plugin est activé et que le provider est exécuté, j'ai une erreur sur la classe du plugin créé.
                      Message : " Did you forget a "use" statement for another namespace?"
                      J'ai bien le use contenant le plugin mais il plante sur l'instanciation du plugin dans le provider.php (ClassNotFoundError​) :
                      $container->set(
                      PluginInterface::class,
                      function (Container $container) {
                      $dispatcher = $container->get(DispatcherInterface::class);
                      $plugin = new Nom_plugin (
                      $dispatcher,
                      (array) PluginHelper::getPlugin('authentification', 'auto')
                      );​

                      ​Merci pour votre aide.

                      Commentaire

                      Annonce

                      Réduire
                      Aucune annonce pour le moment.

                      Partenaire de l'association

                      Réduire

                      Hébergeur Web PlanetHoster
                      Travaille ...
                      X