La base

Dans une application CakePHP, vous pouvez avoir une partie “front” qui ne nécessite pas d’authentification, contrairement à la partie “backend”.

Le “backend” peut être configuré à l’aide de prefix de route comme documenté ici

Le plus simple est de configuré le plugin cakephp/authentication dans votre src/Application.php en ajoutant le plugin, le middleware et la configuration du service dans Application::getAuthenticationService().
Ensuite, il suffit d’ajouter, dans votre App\Controller\BackendController::initialize() :

public function initialize(): void
{
    parent::initialize();

    $this->loadComponent('Authentication.Authentication');
]

Et le tour est joué.

Plus de complexité

(short english explanation on cakephp forum)

On peut être amené à avoir une partie du site qui utilise un FormAuthenticator alors qu’une autre partie va utiliser un HttpDigest ou Token. Dans ce cas, voici une solution, un peu plus complexe mais qui est aussi plus souple.

Dans le fichier config/routes.php :

$routes->prefix(
    'Backend',
    ['path' => '/gestion', '_namePrefix' => 'backend:'],
    function (RouteBuilder $builder) {
        $authenticationService = new AuthenticationService();
        $fields = [
            IdentifierInterface::CREDENTIAL_USERNAME => 'email',
            IdentifierInterface::CREDENTIAL_PASSWORD => 'password',
        ];
        $authenticationService->loadAuthenticator(SessionAuthenticator::class);
        $authenticationService->loadAuthenticator(FormAuthenticator::class, [
            'fields' => $fields,
            'urlChecker' => '\Authentication\UrlChecker\CakeRouterUrlChecker',
            'loginUrl' => ['_name' => 'backend:auth:login'],
        ]);
        $authenticationService->loadIdentifier(PasswordIdentifier::class, [
            'fields' => $fields,
        ]);
        $builder->registerMiddleware('authentication', new AuthenticationMiddleware($authenticationService));
        $builder->applyMiddleware('authentication');

Dans le fichier Application::bootstrap() :

$this->addPlugin('Authentication');

Et ensuite dans le Controller de votre prefix :

public function initialize(): void
{
    parent::initialize();

    $service = $this->request->getAttribute('authentication');
    $service->setConfig([
        'unauthenticatedRedirect' => Router::url(['_name' => 'backend:auth:login']),
        'queryParam' => 'r',
    ]);

    $this->loadComponent('Authentication.Authentication');
}

Désormais, ce prefix va utiliser le service d’Authentification que vous avez configuré dans votre fichier de routes. Et vous pouvez en configurer 1 par prefix, sans limitation.

Cette période de confinement n’a malheureusement pas été propice au développement du projet mais depuis juin j’ai pu suffisamment avancer.

J’étais parti sur une refonte complète et vraiment en profondeur mais finalement c’est beaucoup plus rapide d’utiliser la même structure de données pour les afficher de manière plus moderne. L’ajout de fonctionnalités viendra lorsque le site sera refait au moins à l’équivalent.

Lire la suite de

La version 3 d’AgendaTrad est développée en CakePHP4 et le nombre d’affichage de téléphone ou adresse est assez conséquent dans ce projet, j’ai donc décidé de mettre à jour mon plugin cakephp-contact pour supporter CakePHP4.

Je n’avais pas suivi la bonne route dans la version 1 de ce plugin, tout était aggloméré dans un Trait peu clair et pas testable.
Dans cette version 2, les numéros de téléphones sont en fait un Type de donnée, ça permet de formater de manière automatique les numéro de téléphone à la sauvegarde ou lecture de la base.

Les parties Validation, Utility et Helper restent inchangées mais sont entièrement testée.

J’ai pour le moment mis de côté les adresses, en trouvant pas de bonne manière de faire. A suivre donc …

Le plugin sur Packagist : https://packagist.org/packages/erwane/cakephp-contact
La documentation : https://github.com/Erwane/cakephp-contact/blob/master/README.md
En cas de problème : https://github.com/Erwane/cakephp-contact/issues

Le projet MMOrga / Raidplanner permet aux guildes de créer des événements où leurs membres pourront s’inscrire.

Ce projet est peu utilisé et pour relancer son intérêt, j’ai décidé d’y ajouter un robot Discord. Le robot fait le lien entre le site et le discord de la guilde, et facilite les inscriptions aux événements.

L’occasion de se lancer dans 2 projets simultanément.

Lire la suite de