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.