IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Ruby on Rails Discussion :

autentification à l'aide de filtres


Sujet :

Ruby on Rails

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 107
    Points : 92
    Points
    92
    Par défaut autentification à l'aide de filtres

    bonjour,

    je veux authentifier les users avant de les laisser accéder à certaines
    zones de l'application, et renvoyer les visiteurs non identifiés à une page de
    connexion. D'autre part, je veux mémoriser la page demandée anonymement,
    si le user parvient à s'identifier, elle sera renvoyée automatiquement.

    sinon, on lui laissera une option "back" ou bien après 3 essais en echec
    on forcera le "back" [non implémenté ici]


    De plus, on se rappellera de l'identité de chacun et on laissera le user
    autentifié se déplacer sur le site sans avoir à se re-signer.

    PARDON, PARDON
    chez moi ce qu'il y ci-dessous provoque une bloucle infinie
    je suis obligé de faire <ctl>C sur la console !



    dans application.rb, j'ai mis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    class ApplicationController < ActionController::Base
      helper :all # include all helpers, all the time
     
      protect_from_forgery # :secret => 'XXXXXXXX75'
     
     def authenticate
     
      puts "in authenticate ------------------------------------------"
      if session['user'].nil?
         session['initial_uri'] = request.request_uri
         redirect_to :controller => "users", :action => "login", :id => "1"
      end   
     
     end
    end
    dans users_controller, j'ai mis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    def login
    end
     
    def verify
        puts "<<<<<<<<<<<<<<< in verify"
        pass = params[:user][:pswrd]  # obtain password from erb
        hash = Digest::SHA1.hexdigest(pass)[0..39]  # translate it & verify
        user = User.find(:first, :conditions =>
               ["pseudo = ? and pswrd = ?",
                params[:user][:pseudo], hash] )
     
        if user
           session['user'] = user
           redirect_to session['initial_uri']
        else
           flash['notice'] = "not good, try again"
           redirect_to :controller => "users", :action => "login", :id => "1" 
        end
    end

    dans login.html.erb (map de saisie du login), j'ai mis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <h2>Admin mode - Logon user  login.html.erb </h2>
     
    <% if flash['notice'] %>
    <%= flash['notice'] %>
    <% end %>
     
    <% form_tag :action => 'verify' do %>
     <p>   <label for="pseudo">pseudo</label>
        <%= text_field 'pseudo', 'pseudo' %></p> 
     <p>   <label for="pswrd">pswrd</label>
        <%= password_field 'pswrd', 'pswrd' %></p> 
    <%= submit_tag "Connexion" %>
     
    <% end %>

    dans exposController , j'ai mis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    class ExposController < ApplicationController
      before_filter :authenticate, :only => [:new, :edit, :destroy ] 
      def admin
      end
    lorsque je lance z.doc


    j'obtiens sur la console
    Code X : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
      Parameters: {"action"=>"login", "id"=>"1", "controller"=>"users"}
    
    Processing UsersController#verify (for 127.0.0.1 at 2009-01-09 15:58:46) [POST]
      Parameters: {"commit"=>"Connexion", "pseudo"=>{"pseudo"=>"toto"}, "authenticit
    y_token"=>"2c83a0027fe1eafcc6d5ea9cee077a5cf32d1a52", "action"=>"verify", "contr
    oller"=>"users", "pswrd"=>{"pswrd"=>"333"}}
    
    
    ActionController::UnknownAction (No action responded to verify):
        C:/rails/ruby/lib/ruby/gems/1.8/gems/actionpack-2.1.2/lib/action_controller/
    filters.rb:579:in `call_filters'
        C:/rails/ruby/lib/ruby/gems/1.8/gems/actionpack-2.1.2/lib/action_controller/
    filters.rb:572:in `perform_action_without_benchmark'
    
    Rendering C:/rails/ruby/lib/ruby/gems/1.8/gems/actionpack-2.1.2/lib/action_contr
    oller/templates/rescues/layout.erb (not_found)
    ============2000===========
    .2/lib/action_controller/templates/rescues/layout.erb (not_found)
    
    
    Processing UsersController#login (for 127.0.0.1 at 2009-01-09 20:07:30) [GET]
      Parameters: {"action"=>"login", "id"=>"1", "controller"=>"users"}
    Rendering template within layouts/users
    Rendering users/login
    Completed in 0.00500 (200 reqs/sec) | Rendering: 0.00300 (60%) | DB: 0.00000 (0%
    ) | 200 OK [http://localhost/users/login/1]

    avec en restitution : za.doc

    je ne comprends rien !
    Fichiers attachés Fichiers attachés
    • Type de fichier : doc z.doc (51,0 Ko, 41 affichages)
    • Type de fichier : doc za.doc (52,5 Ko, 48 affichages)

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 107
    Points : 92
    Points
    92
    Par défaut autentification à l'aide de filtres
    je reviens après un moment d'absence ..

    mon premier PC s'est planté avec un bel écran bleu
    (heureusement toujours sous garantie)
    mais j'ai perdu au moins 6 semaines !

    je soupçonne la gestion des USB..


    mon second PC s'est planté une semaine après
    (problème de carte mère)

    caca

    j'ai résolu ce problème
    je ferai un post dans très peu de temps
    a+

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 107
    Points : 92
    Points
    92
    Par défaut autentification à l'aide de filtres
    Les filtres dans application.rb : çà marche pas (rails 2.1.2)

    Application.rb repasse à la normale, à savoir :
    # Filters added here apply to all controllers in the application.
    # Likewise, all the methods added

    class ApplicationController < ActionController::Base
    helper :all # include all helpers, all the time

    # See ActionController::RequestForgeryProtection for details
    # Uncomment the :secret if you're not using the cookie session store

    protect_from_forgery # :secret => 'dd6abe66f0a91387704bb080b845bc75'

    # See ActionController::Base for details
    # Uncomment this to filter the contents of submitted sensitive data
    # parameters from your application log (in this case,
    # all fields with names like "password").
    # filter_parameter_logging :password

    end



    Pour chaque Controller qui possède des méthodes de modification dans une Table, on fait appel dans le controller à une méthode d’authentification du type

    def authenticate

    if session['user'].nil?
    session['initial_uri'] = request.request_uri
    redirect_to :controller => "users", :action => "login", :id => "1"
    end

    end

    qui rend sur une méthode du controller users : « login »

    de la façon suivante :

    par exemple dans exposController
    class ExposController < ApplicationController
    before_filter :authenticate, :only => [:new, :edit, :destroy ]
    def admin
    end





    users_controller appelé par « authenticate »

    def login
    end


    def verify
    pass = params[:ident][:pswrd]
    ipseudo = params[:ident][:pseudo]

    hash = Digest::SHA1.hexdigest(pass)[0..39]

    @who = Users.find(:first, :conditions =>
    ["pseudo = ? and pswrd = ? , ipseudo, hash] )
    if @who
    session['user'] = @who
    redirect_to session['initial_uri']
    else
    flash['notice'] = "not good, try again"
    redirect_to :controller => "users", :action => "login", :id => "1"
    end
    end



    la méthode « login » renvoie sur login.html.erb
    qui à son tour fait le rendu à la méthode « verify » ci-dessus


    <h2>Admin mode - Logon user login.html.erb </h2>

    <% if flash['notice'] %>
    <h3><font color="#FF0000"><%= flash['notice'] %></font></h3>
    <% end %>


    <% form_for(:ident,
    :url => {:action => 'verify'} ) do |f| %>
    <%= f.error_messages %>
    <%= f.label :pseudo %><br />
    <%= f.text_field :pseudo %><br>
    <%= f.label :pswrd %><br />
    <%= f.text_field :pswrd %><br>

    <p>
    <%= f.submit "Connexion" %>
    </p>
    <% end %>

Discussions similaires

  1. SVP aide sur filtre acheteur
    Par casfiwi dans le forum SAGE
    Réponses: 1
    Dernier message: 23/10/2012, 13h31
  2. Eliminer le bruit d'une image a l'aide du filtre median
    Par mihaispr dans le forum Interfaces Graphiques
    Réponses: 11
    Dernier message: 24/03/2009, 09h19
  3. Aide Winform filtre sql avant affichage datagridview
    Par minette dans le forum Windows Forms
    Réponses: 1
    Dernier message: 13/09/2008, 17h19
  4. Aide pour filtre passe-tout (all-pass filter)
    Par glorious_rk dans le forum Signal
    Réponses: 9
    Dernier message: 04/06/2008, 13h10
  5. Réponses: 1
    Dernier message: 28/02/2008, 21h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo