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 :
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 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
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 :
lorsque je lance z.doc
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
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 !
Partager