Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- require 'digest/sha1'
- class User < ActiveRecord::Base
- attr_accessor :new_password
- validates_presence_of :name
- validates_presence_of :email
- validates_uniqueness_of :email
- validates_presence_of :new_password, :if => :password_required?
- validates_presence_of :new_password_confirmation, :if => :password_required?
- validates_confirmation_of :new_password, :if => :password_required?
- has_url_name
- # Users are authenticated with an email/password combination
- # by default
- def self.authenticate(email, password)
- user = self.find(:first, :conditions => ["lower(email) = lower(?)", email])
- return nil if user.nil?
- user if user.password == encrypt(password, user.salt)
- end
- def to_param
- url_name
- end
- def self.find_by_param(*args)
- find_by_url_name *args
- end
- def remember_me
- self.remember_token_expires_at = 2.weeks.from_now.utc
- self.remember_token = encrypt("#{email}--#{remember_token_expires_at}")
- save(false)
- end
- def forget_me
- self.remember_token_expires_at = nil
- self.remember_token = nil
- save(false)
- end
- # Encrypts the password with the user salt
- def encrypt(password)
- self.class.encrypt(password, salt)
- end
- def self.encrypt(password, salt)
- Digest::SHA1.hexdigest("#{salt}#{password}")
- end
- protected
- def before_validation_with_password_hashing
- return unless password_required?
- self.salt = generate_salt
- self.password = encrypt(new_password)
- end
- alias_method_chain :before_validation, :password_hashing
- def before_create_with_salt_generation
- unless self.salt && self.salt.size == 10
- self.salt = generate_salt
- end
- before_create_without_salt_generation
- end
- alias_method_chain :before_create, :salt_generation
- def generate_salt
- chars = ('0'..'9').to_a + ('a'..'z').to_a + ('A'..'Z').to_a
- s = []
- 10.times{ s << chars[rand(chars.size)] }
- return s.join
- end
- def password_required?
- !new_password.blank?
- end
- end
Add Comment
Please, Sign In to add comment