Stoneageblog.com

Le blog [de l'âge] de Pierre

Acts_as_authenticated : Encore un autre système d’authentification !

with 21 comments

Après mon long didacticiel sur Ruby On Rails, me voilà de retour sur des articles plus courts (si si je vais essayer !) pour faire le tour de quelques uns des plugins qui font la force du framework Rails.

Je vais donc commencer (ou plutôt reprendre) ce tour d’horizon avec acts_as_authenticated. Je sais, j’ai déjà parlé à plusieurs reprises 1 2 3 4 de systèmes permettant de traiter l’identification avec Rails, cependant je ne pouvais pas en dire autant sans parler du plugin que j’utilise maintenant sur tout mes projets : acts_as_autenticated.

Plugin, générator, engine : même combat ?

Effectivement c’est la première question qui nous vient à l’esprit, j’ai parlé de 3 systèmes d’identifications et on a 3 dénominations différentes… pour finalement 2 implémentations réellement différentes. Si le LoginEngine et auth_generator portent bien leurs noms (à savoir engine et generator), ce n’est pas tout à fait le cas de acts_as_authenticated qui se nomme « plugin » mais qui n’en a que le nom.

C’est en fait un generator dans le sens où on l’appelle une fois, il génère le code dans notre projet et ensuite on peut très bien effacer sa source car il ne nous sera plus d’aucune utilité (dans le répertoire vendor hein! … faut pas effacer le code généré non plus !).

Un plugin a normalement la vocation d’être utilisé tel quel dans un projet. A l’image d’un Engine, si l’on veut le modifier il faut en général surcharger son fonctionnement à l’intérieur même du projet et non directement dans le code du plugin. Un generator génère un code dans le répertoire du projet, ce code peut ensuite être modifié comme bon vous semble…

Mais alors pourquoi lui plus que les autres ?

Bonne question… Je dirai que son code m’a paru plus clair, plus facile à reprendre et a adapter à mes besoins, c’est peut être aussi dû au fait que je progresse mais quand même, j’ai eu l’impression que acts_as_authenticated faisait ce qu’on lui demandait, le faisait bien et sans trop de complications…

Enfin dernier point, c’est à mon sens le plugin le plus documenté, son wiki est rempli d’infos et de pistes pour l’utiliser correctement et même l’améliorer à sa convenance.

Installation

Pour l’installer, rien de très compliqué, il suffit de suivre le wiki. On commence par ajouter la source du plugin :

script/plugin source http://svn.techno-weenie.net/projects/plugins

Ensuite on l’installe :

script/plugin install acts_as_authenticated

Et enfin on génère le code dans notre projet :

script/generate authenticated user account

Un fichier de migration sera créé (00X_create_user.rb) que vous pouvez modifier à votre guise si vous le souhaitez. Ensuite lancer la migration :

rake db:migrate

Voilà, y’avait rien de sorcier dans cette installation, c’est du grand classique avec Rails. Le plugin vous fourni plusieurs vues dont une pour s’identifier et une pour créer un compte, après c’est à vous d’en faire ce que vous voulez.

Utilisation et améliorations

C’est la partie qui m’a plu avec ce plugin, pas trop de prise de tête à chercher tout seul comment ça marche, tout est dans le wiki ! L’utilisation classique du plugin est la suivante : sur un controller lorsque vous avez besoin de restreindre son utilisation il suffit d’indiquer cela :

before_filter :login_required

si vous avez besoin de le faire que sur une ou deux actions du controller ajoutez ceci à la suite

: only => [ :action1,  :action2 ] #sans espace entre ":" et only !

Ensuite si vous voulez d’aller plus loin avec le plugin vous trouverez facilement comment :

  1. Ajouter un système d’activation de compte
  2. Proposer aux utilisateurs d’éditer leur compte
  3. Proposer aux utilisateurs de changer leur mot de passe
  4. Générer un mot de passe automatiquement
  5. L’utiliser avec plusieurs sites (domaines différents)
  6. Et faire plein d’autres choses avec en lisant entièrement son wiki !

En fait je pense que ce plugin est super de part sa documentation, plutôt que d’installer un generator comme auth_generator qui fait beaucoup plus de base, on installe seulement le strict minimum et on le modifie comme on veut, cela permet de bien comprendre ce qu’on fait et donc de bien progresser avec Rails !

Ouf !

Promis, maintenant j’arrête de parler des systèmes d’identifications. Je voulais juste compléter la série que j’avais commencée y’a un petit moment… Mon prochain billet concernera un truc à la mode : acts_as_taggable, j’expliquerai notamment comment faire son propre nuage de tag

Written by Pierre Rigal

avril 9th, 2007 at 9:52

21 Responses to 'Acts_as_authenticated : Encore un autre système d’authentification !'

Subscribe to comments with RSS or TrackBack to 'Acts_as_authenticated : Encore un autre système d’authentification !'.

  1. Tu m’as convaincu, je vais l’utiliser de ce pas. Merci encore pour tes billets ils sont extras !

    yoann

    17 avr 07 at 8:38

  2. Merci beaucoup pour tout tes articles, ceux ci sont très interessants.

    Toutefois j’ai un léger problème avec celui ci. En effet après l’installation, si je pointe mon naviguateur vers :
    http://localhost:300/account/

    j’ai une erreur :
    uninitialized constant AccountController::AuthenticatedSystem

    Si tu as la solution, je suis preneur ;)

    jblanche

    28 avr 07 at 13:53

  3. Comment se prendre la tête une heure pour rien !

    Tout fonctionne parfaitement a condition de redemarrer son serveur ;)

    Merci encore.

    jblanche

    28 avr 07 at 14:31

  4. Tu connais le plugin authorization ? Il sert à gérer les rôles, c’est un excellent complément à Acts_as_authenticated.

    bien qu’il est l’air très simple, mon faible niveau d’anglais ne me permet de bien comprendre l’utilisation. Oserais-je faire une suggestion intéressée ? un tutoriel serait super bien venu…

    tiens j’ai déjà écrit le début :

    GESTION DES ROLES AVEC LE PLUGIN AUTHORIZATION

    ==>source sur Writertopia : http://www.writertopia.com/developers/authorization

    On l’utilisera ici de pair avec le plugin Acts_as_Authenticated pour la gestion de l’authentification

    installation et configuration

    1) installation executer dans une console :

    ruby script/plugin source http://svn.writertopia.com/svn/plugins/
    ruby script/plugin install authorization
    

    2) dans le fichier environment.rb ajouter les constantes :

    AUTHORIZATION_MIXIN = “object roles” (ou "hardwired" si vous ne voulez pas utiliser de base donnée)
    DEFAULT_REDIRECTION_HASH = { :controller => ‘account’, :action => ‘login’ } (attention ces valeurs n'ont sens que si le plugin Acts_as_Authenticated est installé, sinon il faut mettre votre controleur chargé de l'authentification)
    

    3) dans le cas où vous utilisez une base de données, pour la créer exécutez dans une console :

    ruby script/generate role_model Role
    rake migrate
    

    utilisation

    robin

    11 mai 07 at 13:53

  5. Je ne me suis pas encore penché sur la gestion des rôle et des autorisations spécifiques… principalement car je n’en ai pas eu le besoin dans mes développements !

    Le seul besoin que j’ai déjà eu était de différencier dans mon modèle User un utilisateur admin et un utilisateur classique, ce qui se fait vraiment facilement en ajoutant un champs « role » à la table et en vérifiant ce rôle lors de l’authentification…

    Promis si un jour je dois m’en servir plus en profondeur j’écrirais un article dessus !

    Dans ce style de plugin, il y a aussi :

    Pierre Rigal

    12 mai 07 at 12:26

  6. je ne comprend pas bien le système d’activation de compte ;

    ne faut t-il pas envoyer un mail à la personne qui vient de créer le compte??

    il n’y a pas d’explication à ce sujet ;

    il est fait mention d’un formulaire d’activation ; quel est l’interet d’un tel formulaire???

    jef

    6 juin 07 at 17:58

  7. Le système d’activation permet de vérifier avec certitude la validité de l’adresse mail du visiteur.

    Un mail est effectivement envoyé à la personne contenant un lien sur lequel la personne doit cliquer pour activer son compte. Si la personne clique sur le lien, aucun soucis, le formulaire d’activation n’est pas nécessaire.

    Par contre si la personne ne reçoit les mails qu’au format texte, elle ne peut pas cliquer sur les liens, il faut alors qu’elle copie colle le code d’activation sur le formulaire du site….

    Pierre Rigal

    7 juin 07 at 9:08

  8. Bêtes question mais où faut-il mettre le « before_filter :login_required », je début avec ruby, mais je le trouve très intéressant et rapide…Quand je le met dans mon app j’obtiens…

    undefined method `login_required’ for # RAILS_ROOT: ./script/../config/..

    merci ;)

    markusemile

    2 juil 07 at 9:58

  9. Il faut le mettre dans ton controller en dessous la déclaration de la classe…

    (NB: Lorsque tu installes un plugin n’oublie pas de redémarrer le serveur pour que les modifications soient prises en comptes)

    Pierre Rigal

    2 juil 07 at 10:09

  10. comment puis-je mettre unsysteme de login sur ma home page ? J’ai réaliser ce tuto, mais j’ai par exemple 2 autre page qui se nomme membre.rb et postage, idem dans le controller. Mais quand je met before_filter :login_required à la fin de ma page membre, j’ai une erreur (normal je présume). Comment obliger pour certaine page, les personnes a ce loger et les rediriger ? y a t’il un tuto, et franaçais si possible (j’en demande boucoup je sais ;)

    markusemile

    5 juil 07 at 16:34

  11. Le filtre before_filter sert à protéger une action et/ou un controller, par exemple tu peux avoir le controlleur suivant :

    class MembreController < ApplicationController
      before_filter :login_required  : only => [ :edition ] #sans espace entre : et only
      #liste des membres, non protégé
      def liste
        ...
      end
      #edition du compte, protégé
      def edition
        ...
      end
    end
    

    Ainsi tu pourras avoir la liste des membres sans besoin de t’identifier mais tu devra être identifier pour éditer la fiche d’un membre…

    Pierre Rigal

    5 juil 07 at 18:46

  12. Sorry, mais j’ai ceci comme erreur

    app/controllers/membres_controller.rb:2: parse error, unexpected ‘:’, expecting kEND before_filter :login_required :o nly => [ :edition] ^

    markusemile

    6 juil 07 at 9:32

  13. si je met ceci

    class MembresController ‘list’ end

    j’obtiens ceci

    undefined method `login_required’ for #

    markusemile

    6 juil 07 at 9:36

  14. J’arrive pas a rentrer mon code pour expliquer…mais j’obtiens ça comme message d’erreur

    undefined method login_required for #MembresController:0x88b1804

    markusemile

    6 juil 07 at 9:40

  15. J’ai l’impression qu’il ne reconnait pas la class, dois-je déclarer Acts_as_authenticated ailleur aussi ?

    markusemile

    6 juil 07 at 9:46

  16. ok tu as oublier de préciser qu’il fallait rajouter dans application.rb include AuthenticatedSystem…ainsi cela fonction Merci pour ton aide et bonne continuation

    markusemile

    6 juil 07 at 9:51

  17. [...] J’ai testé Acts as authenticated d’après les conseils de http://www.stoneageblog.com/articles/2007/04/09/acts_as_authenticated-encore-un-autre-systeme-dauthentification/ mais je suis un peu déçu. [...]

  18. maintenant qu’on est passé au REST avec rails 2.0 il vaut mieux utiliser Restful authentication du même auteur. http://svn.techno-weenie.net/projects/plugins/restful_authentication/

    agouti

    19 nov 07 at 19:09

  19. Bonjour, Je suis novice dans ruby on rails, mais j’ai un projet à effectuer étant en 2e année de R&T… J’ai un petit problème de compréhension, en fait je veux appliquer l’identification d’utilisateur a une seule page de mon site… et je voudrais savoir en plus comment faire pour qu’a chaque fois que je dois y aller on me demande juste un pseudo et mon mot de passe….voila je vous remercie de votre future réponse qui sera claire j’en suis sur.

    Tibo

    26 déc 07 at 14:32

  20. En fait le système d’authentification permet de « protéger » un controller entier, un groupe d’actions ou seulement une action. Imaginons que votre page réponde à l’action monaction du controller moncontroller alors il suffit d’indiquer monaction après l’option « only »…

    NB : Le plugin d’authentification permet de créer une gestion d’utilisateurs complète. Si votre souhait est juste de protéger une page avec un mot de passe et un utilisateur sans utiliser de base de donnée, vous pouvez juste faire une action (par exemple def mon_systeme_de_login …) qui vérifiera en dur la saisi d’un login et d’un mot de passe venu d’un formulaire et enfin créer un filtre (before_filter :mon_systeme_de_login) sur l’action qui affiche votre page…

    Pierre Rigal

    26 déc 07 at 14:41

  21. Bonjour j’ai besoin de votre aide assez rapidement svp… Pouvez vous me dire comment faire car quand je rentre un login et un mail ca marche nikel… Mais quand je veux me reconecter avec ces deux memes, il est impossible car il me dit que le mail et le login sont déjà utilisé… pourtant j’utilise bien la fonction logout….

    Tibo

    14 jan 08 at 20:07

Leave a Reply