Archive for backend

Symfony3 : L’authentification simplifiée avec Guard

Symfony3 : L’authentification simplifiée avec Guard

Profitant de quelques jours de calme bien mérités, on en profite pour continuer de se familiariser avec Symfony3. Bon autant être clair, la vérité c’est que pour l’instant les vraies nouveautés ne se bousculent pas au portillon, mais, il en existe au moins une qui mérite vraiment d’être étudiée : Symfony Guard.Symfony Guard est le nouveau système d’authentification apparu dans la version 2.8 de Symfony, il a pour vocation de simplifier la mise en place d’une stratégie d’authentification. En effet, alors que jusqu’à maintenant il fallait implémenter des milliers (on exagère à peine) d’interfaces et factory différentes, il n’est désormais nécessaire d’implémenter qu’une interface : Le « AbstractGuardAuthenticator« .

Cette interface ne contient que 7 méthode à implémenter:

  • getCredentials: Permettant d’extraire les identifiants de la requête (on peut imaginer un login/password soumis via un formulaire, une clé d’API passée en paramètre GET, etc.)
  • getUser: Permet de récupérer un utilisateur en fonction de ses identifiants (pouvant se trouver dans une BDD, un fichier, etc…)
  • checkCredentials: Permet de vérifier les identifiants
  • createAuthenticationToken: Permet de créer le token d’authentification
  • onAuthenticationFailure: Retourne un objet Response dans le cas où l’authentification échoue
  • onAuthenticationSuccess: Retourne un objet Response dans le cas où l’authentification réussit
  • supportsRememberMe: Permet de spécifier si la stratégie d’authentification supporte la fonctionnalité « Se souvenir de moi »

Ensuite il suffit simplement d’enregistrer cette classe en tant que service afin de pouvoir l’utiliser dans le security.yml et le tour est joué !

Pour plus de détail, vous trouverez ci-dessous un tutoriel expliquant comment implémenter un mécanisme d’authentification avec Symfony Guard: https://symfony.com/doc/current/cookbook/security/guard-authentication.html

Facile !

EasyAdminBundle : des admins « easy »

EasyAdminBundle : des admins « easy »

Pour ceux qui développaient avec Symfony 1.4, vous connaissez sûrement l’Admin Generator : ce composant permettait de générer automatiquement une interface d’administration en fonction du modèle de données (entités), ce qui faisait gagner énormément de temps lors de la création de backend.

Ce composant n’est plus présent dans Symfony 2, à notre grand regret, et comme la plupart du temps nos applications web et mobiles ont besoin d’interfaces d’administrations, on est contraints de tout créer « from scratch ».
Heureusement des bundles existent pour créer ces admin, le plus connu Sonata permet de générer le code de ces interfaces qu’on peut ensuite personnaliser. Cela accélère le développement mais créé aussi beaucoup de code ce qui peut être parfois difficile à maintenir.

Aujourd’hui, un développeur de SensioLabs, Javier Eguiluz, apporte sa pierre à l’édifice avec la sortie de son bundle EasyAdminBundle.

Ce bundle est prometteur puisqu’il permet de créer des interfaces d’administrations basées sur des fichiers de configuration yaml, rappelant ainsi un fonctionnement similaire à feu l’Admin Generator. Il est également possible d’étendre les fonctionnalités des admins générées de manière plus simple qu’avec Sonata (à priori le nombre de templates est plus limité).

Côté utilisateur, l’admin générée permet de lister, créer, éditer, supprimer les entités, mais il est possible pour le développeur d’étendre les fonctionnalités de l’admin avec ses propres templates / controlleurs.

Autre avantage, son thème graphique simple (certains diront simpliste) est responsive et basé sur Bootstrap. Même s’il est indiqué dans la doc, qu’aucun système de theming n’est prévu, le code étant basé sur Bootstrap il doit être possible de skinner le tout assez facilement.

Les pré-requis sont Symony 2.3+, Dotrine ORM et que les entités aient comme clé primaire une propriété « id » (rien de très exotique). Pour le moment les relations many-to-many ne sont pas supportées, mais avec la souplesse de développement qu’offre Symfony on peut être certains que ce sera rapidement le cas.

Ce bundle est disponible à partir d’aujourd’hui, alors on va s’empresser de le tester pour voir ce qu’il a dans le ventre !