Authentification externe dans Prestashop
Récemment j’ai eu besoin d’intégrer une boutique à une application web déjà existante.
Je reviendrais plus en détail dans un prochain article sur cette intégration qui mériterait un article à elle seule.
Bref, j’ai choisi la solution e-commerce Prestashop. Malheureusement, Prestashop n’est pas vraiment fait pour ça. C’est un logiciel très monolithique et relativement peu extensible. Prestashop a donc sa propre base de données utilisateurs et son mécanisme d’authentification avec — bien évidemment — pas de documentation, du code fortement couplé et parfois redondant.
Pour que la bascule de mes utilisateurs vers la boutique soit la plus transparente possible, il me fallait donc absolument :
- que mes utilisateurs n’aient pas à s’inscrire dans la boutique
- qu’ils n’aient pas à se connecter sur la boutique (mais uniquement par mon application)
- qu’ils n’aient pas de mot de passe dans la boutique
- qu’ils soient connectés avant de charger la boutique
Cela revient donc à utiliser une authentification externe à Prestashop. Malheureusement, Prestashop n’est pas prévu pour. Il y a bien quelques modules pour faire une authentification par Facebook Connect et alibi mais ils ne permettent pas une intégration complète et transparente à un site existant.
Je suis tombé sur plusieurs posts dans les forums de prestashop sur la question, malheureusement les développeurs de Prestashop ne semblent pas très actifs sur ces questions de haut niveau.
La bonne nouvelle est que j’ai trouvé une solution qui fonctionne et que j’ai publié sur github : github.com/hparfr/prestashopBridge.
Comment ça marche ?
L’utilisateur va tout d’abord s’authentifier sur l’application existante (dans l’exemple sur github il s’agit d’une appli symfony2). Une fois authentifié, un controleur va invoquer la librairie prestashopBundle. Cette dernière va utiliser des fonctions internes de prestashop et va créer un cookie d’authentification. Lorsque l’utilisateur ira sur la boutique, ayant déjà un cookie il sera immédiatement reconnu et son profil chargé.
Par ce biais, c’est l’application existante qui se charge de l’authentification. Cela permet de faire des choses beaucoup plus sécurisées que la petite sauce maison de Prestashop : hasher le mot de passe avec md5 et la même graine pour tout le monde ! (oui oui !).
Si vous souhaitez intégrer une boutique dans votre application web, n’hésitez pas à me contacter, je fais aussi du consulting.