Guest User

Untitled

a guest
Mar 11th, 2018
107
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.51 KB | None | 0 0
  1. # class User < ActiveRecord::Base
  2. # include Clearance::User
  3. # acts_with_username
  4.  
  5. module ActsWithUsername
  6.  
  7. def self.included(base)
  8. base.extend(ClassMethods)
  9. end
  10.  
  11.  
  12. module ClassMethods
  13. def acts_with_username
  14.  
  15. extend ClassMethodsMixin
  16.  
  17. attr_accessible :username
  18.  
  19. # TODO только латиница, цифры, дефис, подчекивание и тире
  20. validates_format_of :username, :with => %r{[a-zA-Z0-9_\-.]+}
  21. validates_presence_of :username
  22. validates_uniqueness_of :username
  23.  
  24. before_save :downcase_email
  25.  
  26. include InstanceMethods
  27.  
  28. end
  29. end
  30.  
  31. module ClassMethodsMixin
  32.  
  33. def authenticate(email, password)
  34. user = find(:first, :conditions => ['username = ? OR email = ?', email.to_s.downcase, email.to_s.downcase])
  35. user && user.authenticated?(password) ? user : nil
  36. end
  37.  
  38. end
  39.  
  40. module InstanceMethods
  41.  
  42. def authenticated?(pw)
  43.  
  44. # Если не указан salt, значит это старый пользовать из жажды
  45. # у которого пароль записан в md5 без salt.
  46. # zhazhda_user
  47. unless salt
  48. return unless encrypted_password == Digest::MD5.hexdigest(pw)
  49. self.password=pw
  50. self.salt = generate_hash("--#{Time.now.utc.to_s}--#{pw}--")
  51. save
  52. end
  53. super
  54. end
  55.  
  56.  
  57. def downcase_email
  58. self.email = email.to_s.downcase
  59. end
  60.  
  61.  
  62. end
  63. end
  64.  
  65. ActiveRecord::Base.send :include, ActsWithUsername
Add Comment
Please, Sign In to add comment