Système de login avec Rails
15/ 11/ 2006
Attention ! Billet en cours de rédaction.
Beaucoup essayent des plugins différents pour gérer le système de login de leur application Rails. Nou allons voir ici comment en créer un rapidement sans avoir à recourir à l’un de ces plugins.
Vous allez voir c’est assez simple :
Création du model User
Il suffit de lancer tout simplement la commande :
$ ./script/generate model User
Création du controller Account
Ensuite, nous allons créer le contrôleur Account qui va gérer le système de login de notre application. Tapez la commande suivante :
$ ./script/generate controller Account login signup
Modification du contrôleur
Voilà à quoi ressemble le fichier :
1 2 3 4 5 6 7 |
class Account < ApplicationController def login end def signup end end |
Il faut le modifier comme celà :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
class Account < ApplicationController def login return unless request.post? # authenticate est une métode qu'on implémentera, ensuite, dans le Model 'User' @user = User.authenticate(params[:email], params[:password]) model if @user.nil? session[:user] = @user.id redirect_to :controller => "admin/general", :action => "config" end end def signup return unless request.post? @user = User.new(params[:user]) if @user.save redirect_to :controller => "admin/general", :action => "config" else flash[:notice] = "Error" redirect_to :action => "login" end end end |
Modification du Model
Nous allons, maintenant, modifier le modèle pour lui ajouter la méthode d’authentification authenticate et la méthode pour crypter le mot de passe encrypt.
Voilà à quoi ressemble le source :
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 |
require 'digest/md5' class User < ActiveRecord::base before_save :encrypt_password validates_presence_of :email, :password validates_uniqueness_of :email, :password def encrypt_password self.password = encrypt(self.password) end def authenticate(email, password) find_by_email_and_password(email, encrypt(password)) end def encrypt(password) self.class.encrypt(password) end # Encrypte le mot de passe # en créant une empreinte MD5 unique def self.encrypt(password) Digest::MD5.hexdigest(password) end end |
Désolé, mais les commentaires sont fermés pour ce billet