Sha256: 61ab3a33035747d2314c49f6daffb3443dd809d350efb51fef97d29f0ad32dbb
Contents?: true
Size: 1.54 KB
Versions: 4
Compression:
Stored size: 1.54 KB
Contents
class User include Mongoid::Document include Mongoid::Timestamps field :username, :type => String field :email, :type => String field :password_salt, :type => String field :password_hash, :type => String # new columns need to be added here to be writable through mass assignment attr_accessible :username, :email, :password, :password_confirmation attr_accessor :password before_save :prepare_password validates_presence_of :username validates_uniqueness_of :username, :email, :allow_blank => true validates_format_of :username, :with => /^[-\w\._@]+$/i, :allow_blank => true, :message => "should only contain letters, numbers, or .-_@" validates_format_of :email, :with => /^[-a-z0-9_+\.]+\@([-a-z0-9]+\.)+[a-z0-9]{2,4}$/i validates_presence_of :password, :on => :create validates_confirmation_of :password validates_length_of :password, :minimum => 4, :allow_blank => true # login can be either username or email address def self.authenticate(login, pass) user = find(:first, :conditions => {:username => login}) || find(:first, :conditions => {:email => login}) return user if user && user.matching_password?(pass) end def matching_password?(pass) self.password_hash == encrypt_password(pass) end private def prepare_password unless password.blank? self.password_salt = Digest::SHA1.hexdigest([Time.now, rand].join) self.password_hash = encrypt_password(password) end end def encrypt_password(pass) Digest::SHA1.hexdigest([pass, password_salt].join) end end
Version data entries
4 entries across 4 versions & 1 rubygems