Quick links: Content - sections - sub sections
EN FR
Quick Search Advanced search
 
Page

  [Opened] Comment conserver la session jAuth à la ré-ouverture du navigateur ?

Posted by antoinefr on 07/23/2007 20:08

Bonjour à tous,

Voilà donc tout d'abord petite présentation rapide car c'est mon premier post ici, je m'intéresse à Jelix depuis plusieurs mois déjà, j'ai déjà eu l'occasion de développer une petite appli avec il y a 6 mois pour "tester" le framework, je me lance aujourd'hui dans la réalisation d'une appli plus importante et je trouve que Jelix est vraiment impressionnant : agréable à utiliser, rapide à prendre en main et rapide à l'éxecution aussi (par rapport à d'autres frameworks), avec des fonctionnalités très intéressante... bref, là n'était pas le sujet de mon post.

J'ai donc implémenter dans cette application la logique d'authentification des utilisateurs via jAuth, sans problème, basé sur un DAO et les infos utilisateurs en base, mon propre controller permettant la connexion/déconnexion. Le problème est que j'aimerais implémenter la fonction (assez courante sur d'autres sites) du fameux "Se souvenir de moi", permettant à l'utilisateur de se connecter et de ne pas avoir à se re-connecter à la prochaine visite sur le site (même s'il ferme son navigateur). Je pense à une solution basée sur un cookie, mais existe t-il des facilités dans le plugin jAuth afin de mettre en place cette solution ? Je n'ai rien vu de tel dans la documentation. Comment procéderiez-vous ?

Désolé pour ce premier post un peu (trop) long, et merci d'avances pour vos réponses...

  [Opened] Re: Comment conserver la session jAuth à la ré-ouverture du navigateur ?

Reply #1 Posted by chris on 07/23/2007 20:54

Bonjour,

Je n'ai pas d'aide à apporter, mais la réponse m'intéresse vivement ;-)

  [Opened] Re: Comment conserver la session jAuth à la ré-ouverture du navigateur ?

Reply #2 Posted by laurentj on 07/23/2007 21:31

Bonjour,

Pour l'instant, il est vrai qu'il n'y a pas de fonctionnalités "se souvenir de moi". C'est quelque chose qu'il faudrait mettre en place.

Il faudrait bien sûr stocker des informations dans les cookies. Le plugin de coordination "auth" devrait alors, dans le cas où la session est vide, tenter de récupérer les cookies, et ensuite appeler la classe jAuth pour procéder à l'authentification. Cependant, jAuth::login necessite un mot de passe en clair. Mais on ne peut pas stocker un mot de passe en clair dans le cookie, trop dangereux. Voir comment font les autres sites...

Pour la création du cookie, ça se ferait lors de l'authentification, soit dans jAuth, soit dans le controleur du module jauth. Je ne sais pas trop ce qui est le mieux. Faudrait plus y reflechir.

Si tu as des propositions...

En tout cas, ça mériterait que tu crée un ticket dans le tracker.

  [Opened] Re: Comment conserver la session jAuth à la ré-ouverture du navigateur ?

Reply #3 Posted by laurentj on 07/23/2007 21:47

j'ai regardé comment faisait phorum par exemple : il stocke le login + mot de passe crypté.

Si on veut utiliser le même système, il faudrait ajouter un paramètre à jAuth::login pour lui dire si le mot de passe est crypté ou non.

Ou alors il faut trouver un algorithme de cryptage reversible, du genre, lors de l'authentification, dans le controleur, on crypte le mot de passe avec une clé (privée, stockée dans la conf de l'authentification), on stocke alors ce mot de passe crypté dans le cookie. Et pour vérifier l'authentification par cookie, le plugin auth récupère le cookie login+motde passe, décrypte le mot de passe, et le donne à jAuth::login pour vérifier tout ça.

PS: pour le cryptage reversible, on peut utiliser les fonctions mcrypt, mais elles ne sont pas activées par défaut dans PHP :-/

  [Opened] Re: Comment conserver la session jAuth à la ré-ouverture du navigateur ?

Reply #4 Posted by antoinefr on 07/23/2007 22:46

Pour info, j'ai ouvert le ticket #229 concernant ce point.

Le mieux serait donc d'utiliser un algo réversible pour crypter le password dans le cookie et le décrypter dans le plugin auth afin de s'authentifier ? ça me parait bien, et avec cette solution il n'y a pas de modif de la classe jAuth...

  [Opened] Re: Comment conserver la session jAuth à la ré-ouverture du navigateur ?

Reply #5 Posted by laurentj on 07/24/2007 09:49

@antoinefr : oui c'est tout à fait ce qu'il faudrait faire

  [Opened] Re: Comment conserver la session jAuth à la ré-ouverture du navigateur ?

Reply #6 Posted by antoinefr on 07/24/2007 10:56

OK, alors je propose d'implémenter cette fonction dans mon appli, et si ça marche, je te présente ma solution, et les modifs à faire dans Jelix pour éventuellement l'inclure dans le framework...

Pour le cryptage/decryptage, j'envisage de créer un nouveau plugin, sur le principe de ce qui est fait pour les drivers de jAuth. Une interface toute simple jCrypt (par exemple), et deux implémentation en standard : une "simple" utilisant la fonction de cryptage que tu as trouvée sur phpbuilder, une autre plus évoluée basée sur mcrypt. Ce qui permet d'implémenter d'autres algo plus tard... Qu'en penses-tu ?

Ce plugin serait utilisé au niveau du plugin coord auth pour vérifier s'il existe un cookie, récupèrer et décrypter les infos, et connecter l'utilisateur.

Mais concernant l'écriture du cookie ? Où serait-il le plus judicieux de le faire ? Dans jAuth::login ? En utilisant l'événement émis par jAuth à la connexion ? Et il faut permettre au développeur d'activer/désactiver cette fonction, car tout le monde ne voudra pas forcement l'avoir dans son appli...!

  [Opened] Re: Comment conserver la session jAuth à la ré-ouverture du navigateur ?

Reply #7 Posted by antoinefr on 07/27/2007 10:02

OK, j'ai fini d'implémenter cette nouvelle fonction. Il me reste à tester et à livrer le patch, je pars en vacances ce soir donc ce sera pour la semaine prochaine :) A+

  [Opened] Re: Comment conserver la session jAuth à la ré-ouverture du navigateur ?

Reply #8 Posted by antoinefr on 08/04/2007 14:47

Je viens d'attacher le patch au ticket #229 .

Une petite question : dans le diff généré par svn, je remarque un mauvais encodage de certains caractères... mes sources sont bien en UTF-8, et j'ai l'impression que ce problème d'encodage vient de svn diff... est-ce que vous avez déjà remarqué ça ?

  [Opened] Re: Comment conserver la session jAuth à la ré-ouverture du navigateur ?

Reply #9 Posted by antoinefr on 08/04/2007 20:02

En effet, il vaut mieux utiliser

 if(isset($_COOKIE[$cookieName]) && $_COOKIE[$cookieName]){

pour tester la présence ou non d'un cookie !!

Sinon, pour les problèmes d'encodage des sources, j'ai utiliser Eclipse comme éditeur, ce n'est surement pas le top mais c'était plus pratique pour moi... quel est l'éditeur que vous utilisez (si éventuellement j'aurais à retravailler sur le code de Jelix) ?

Voilà, si tu as des questions ou des remarques n'hésite pas !!

Edit : Il est bien sûr possible de faire évoluer mon code, par exemple en permettant le paramètrage (optionnel) de l'aglorithme mcrypt utilisé pour crypter/decrypter les cookies... de cette façon se serait encore plus sûr, car les utilisateurs de Jelix pourraient utiliser un algo de cryptage différent (en fonction de ceux installés sur leur serveur par exemple) plutôt que d'utiliser celui par défaut...!

 
Page
  1. Comment conserver la session jAuth à la ré-ouverture du navigateur ?