lundi 27 juin 2011

Authentication System : part 2

Bonjour,


Dans la première partie de cet article, nous avons vu comment chiffrer les informations de connexion d'un utilisateur avant de les stocker dans la base de données; et nous avions une méthode login qui nous permet de comparer des signatures de mots de passe. Donc nous avions un systéme de SignUp/SignIn assez utilisable mais qui reste indépendant de notre application. C'était le but c'est vrai. 
Aujourd'hui nous allons utiliser ce système pour sécuriser notre application.


On veut que seules les pages d'accueil et de connexion soient accéssibles aux gens pas encore connectés. Et pour celà nous allons utiliser ce qu'on appelle des filtres. 
Les filtres sont des .......... voir wikipedia :)



class AppController < ApplicationController

  before_filter :logged_in, :except => [:index, :login]

  def index
     # ....
  end
  
    # ... la suite du contrôleur
end

Une fois que Rails voit le before_filter dans notre contrôleur, il effectue plusieurs choses : passer la main à la méthode appelée ( logged_in dans notre cas ) et attend que cette méthode lui donne une réponse claire : True ou False.

Une fois que la réponse est là, il lit le reste du bloc de code et l'exécute.

Nous remarquerons certainement que la méthode logged_in n'a pas encore été définie. Alors où est ce qu'on doit la définir ? dans un endroit où elle sera accessible par toutes les entités de notre application : contrôleurs et vues. Nous verons pourquoi plus tard inchaallah.


class ApplicationController < ActionController::Base


  helper_method :connected?, :logged_in


  protected 
  
  def connected?
return true if session[:utilisateur]
false
  end 
  
  def logged_in
if !connected?
redirect_to login_path 
flash[:message]= " Désolé ! Accés refusé"
    end
   
  end
end



Du nouveau ! En plus de l'utilisation de méthodes privées nous avons utilisé une nouvelle méthode : helper_method


Alors que fait cette méthode ? 


Elle permet de rendre disponible une méthode dans le scope de vues ! C'est tout ce que nous avons besoin de dire et de savoir à ce stade.


Et maintenant dans nos vues on peut s'amuser à faire : 


<% if logged_in %> 
   Bonjour
<% else %>
  <%= link_to " connexion ", login_path %>
<% end %>


Merci et bonne semaine.

1 commentaire: