Index: user.rb =================================================================== --- user.rb (revision 2250) +++ user.rb (working copy) @@ -53,8 +53,8 @@ attr_protected :login, :admin, :password, :password_confirmation, :hashed_password validates_presence_of :login, :firstname, :lastname, :mail, :if => Proc.new { |user| !user.is_a?(AnonymousUser) } - validates_uniqueness_of :login, :if => Proc.new { |user| !user.login.blank? } - validates_uniqueness_of :mail, :if => Proc.new { |user| !user.mail.blank? } + validates_uniqueness_of :login, :if => Proc.new { |user| !user.login.blank? }, :case_sensitive => false + validates_uniqueness_of :mail, :if => Proc.new { |user| !user.mail.blank? }, :case_sensitive => false # Login must contain lettres, numbers, underscores only validates_format_of :login, :with => /^[a-z0-9_\-@\.]*$/i validates_length_of :login, :maximum => 30 @@ -84,7 +84,7 @@ def self.try_to_login(login, password) # Make sure no one can sign in with an empty password return nil if password.to_s.empty? - user = find(:first, :conditions => ["login=?", login]) + user = find_by_login(login) if user # user is already in local database return nil if !user.active? @@ -183,6 +183,11 @@ def self.find_by_mail(mail) find(:first, :conditions => ["LOWER(mail) = ?", mail.to_s.downcase]) end + + # Makes find_by_login case-insensitive + def self.find_by_login(login) + find(:first, :conditions => ["LOWER(login) = ?", login.to_s.downcase]) + end # Sort users by their display names def <=>(user)