Bonjour,

J'ai mis au point un fichier LdapAuthenticate pour mes besoins perso qui marche bien lorsque je le place dans vendor\cakephp....\Auth\
Je voudrais le déplacer pour qu'il ne soit pas ecraser au prochain composer update !
Je tatone un peu avec les notions de plugin. J'ai essayé plusieurs choses mais a chaque fois cakephp me dit :
=> Authentication adapter "MyLdap/Ldap" was not found

Ce que je fais

Dans boostrap j'ai ajouté le chargement du plugin :

Plugin::load('MyLdap'); 

Dans AppController j'ai fait précédé Ldap du nom du plugin :

 $this->loadComponent('Auth', [
                'authorize' => 'Controller',
                'unauthorizedRedirect' => $this->referer(),                          
                'authenticate' => [
                    'MyLdap.Ldap' => [
                        'fields' => [
                            'username' => 'username',
                            'password' => 'password'
                        ],
                    ]
                ],

Je n'arrive pas a faire ce que je veux.
Du coup je ne sais pas si je suis sur la bonne voix avec la notion de plugin ou s'il faut que je fasse cela autrement.

5 réponses


PhiSyX
Réponse acceptée

Yop. Oui j'ai compris qu'après un composer update le dossier ./vendor/cakephp/cakephp/.../Auth se "nettoie" (et c'est normal) moi je parlais de ton application à toi et non celle de cakephp. Ton application ne se vide pas ^^

./src !== ./vendor/cakephp/cakephp/src

  • ¹./src contient tes sources (Controller/Model/Template/View...)
  • ./vendor/cakephp/cakephp/src contient celles de cakephp

Ton fichier tu dois le mettre dans tes sources à toi dans ¹./src/Auth.

¹: ./src = Par défaut car il est possible de changer le nom du repertoire de l'application par un autre nom. (donc si tu as changé le nom du repertoire, alors mettre le nom du repertoire changé)

Yop... Rien ne t'empeche de placer ton fichier dans ton application à toi (et non dans celle de cakephp).
Par exemple tu places ton fichier dans "src/Auth/LdapAuthenticate.php", tu lui donnes le bon namespace et tu l'ajoutes dans le gestionnaire d'authentification en utilisant la config authenticate; le nom de la classe complete (avec namespace) que tu as crée et normalement tu es bon ^^

Froggyp
Auteur

C'est ce que j'ai fait et qui fonctionne correctement mais j'ai fait un update avec composer. Une nouvelle version de cakephp a été chargé et donc le contenu de src/Auth/ a été nettoyé et donc ce n'est pas la solution durable !!

sur la partie update des dependances voila pour cakephp 3

..
 Removing cakephp/cakephp (3.1.7)
  - Installing cakephp/cakephp (3.1.12)
    Loading from cache
..

Un fois cet update fait, le contenu du repertoire ../vendor/cakephp/cakephp/src/Auth ne contient PLUS mon fichier LdapAuthenticate.php

Je pense qu'il faut creuser du coté des components comme la doc le suggère mais c'est mon 1er component donc je tatone un peu.
Voila ce que dit la doc cakephp 3:

Créer des Objets d’Authentification Personnalisés

Comme les objets d’authentification sont modulaires, vous pouvez créer des objets d’authentification personnalisés pour votre application ou plugins. Si par exemple vous vouliez créer un objet d’authentification OpenID, dans src/Auth/OpenidAuthenticate.php ...

La doc cakephp 2 donne une piste de plus

... Dans app/Controller/Component/Auth/OpenidAuthenticate.php vous pourriez mettre ce qui suit ..

Une idée sur l'implementation et son appel dans AppController ?

Bonjour.
Pour information, les plugins sur la V3 ne doivent pas tous obligatoirement se situer dans le dossier vendor, tu peux très bien le placer dans le dossier plugins qui se situe à la racine de ton application.
Par contre, si tu veux créer un plugin qui puisse être utilisé sur plusieurs de tes applications CakePHP via Composer, il te faut utiliser la syntaxe correcte, pour t'aider sur la notion de création de plugins installable via Composer, tu peux utiliser une ressource de Xeta : A skeleton example to create a Cake3 plugin.
Pour information, les chargements de plugins de CakePHP V3, sont sous cette forme (pour ceux situés dans le dossier vendor) :

Plugin::load('User/Package');
Froggyp
Auteur

Merci.
Tout fonctionne correctement. La solution de PhiSyX est simple et j'ai préféré abandonner pour le moment la notion de plugin
J'ai ajouté mes fichiers LdapAuthenticate.php et Form2Authenticate.php dans ./src/Auth de l'application
nb: Je ne pensais pas que l'on pouvait ajouter des choses dans ce repertoire src !