lundi, mars 03, 2008

MD5 en Ruby

Pour mon autentification d'un utilisateur avec rails en utilisant la méthode "authenticate_or_request_with_http_basic" de Basic HTTP authentication, j'avais besoin de vérifer le mot de passe.

Pour celà, j'avais besoin de transformer le mot de passe saisi par l'utilisateur en md5 pour le comparer avec le md5 stocké en base (pour éviter de stocker des mots de passe en clair dans la base de données).
Et bien c'est très simple, il suffit de 2 lignes de code:

require 'digest/md5'
hash = Digest::MD5.hexdigest(password)
Dans le cas de mon application rails pour voir le code complet, ça donne:

class ApplicationController < ActionController::Base
  before_filter :authenticate
  
  protected
  
  def authenticate
    authenticate_or_request_with_http_basic do |username, password|
      auth = User.auth?(username, password)
      if(auth)
        session[:auth], session[:username] = true, username
        return true
      end
      return false
    end
  end
end

require 'digest/md5'

class User < ActiveRecord::Base
  # return true if (username and hashed_password) are correct
  def self.auth?(username, password)
    hashed_password = Digest::MD5.hexdigest(password)
    user = User.find(:first, 
        :conditions => "username='#{username}' and password='#{hashed_password}'" )
    logger.info "#{username}/#{hashed_password} > auth? : #{!user.nil?}"
    return !user.nil?
  end
end
Technorati tags:

Aucun commentaire: