user.rb 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. class User < ApplicationRecord
  2. attr_accessor :remember_token
  3. validates :name, presence: true
  4. VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-]+(\.[a-z\d\-]+)*\.[a-z]+\z/i
  5. validates :email, presence: true, length: { maximum: 255 },
  6. format: { with: VALID_EMAIL_REGEX },
  7. uniqueness: { case_sensitive: false }
  8. before_save { email.downcase! }
  9. validates :login, presence: true, length: { maximum: 50 },
  10. format: { with: /\A[a-zA-Z0-9_]+\Z/ },
  11. uniqueness: { case_sensitive: false }
  12. has_secure_password
  13. validates :password, presence: true, length: { minimum: 6 }
  14. # Returns the hash digest of the given string.
  15. def User.digest(string)
  16. cost = ActiveModel::SecurePassword.min_cost ? BCrypt::Engine::MIN_COST :
  17. BCrypt::Engine.cost
  18. BCrypt::Password.create(string, cost: cost)
  19. end
  20. # Returns a random token.
  21. def User.new_token
  22. SecureRandom.urlsafe_base64
  23. end
  24. def remember
  25. self.remember_token = User.new_token
  26. update_attribute(:remember_digest, User.digest(remember_token))
  27. end
  28. # Returns true if the given token matches the digest.
  29. def authenticated?(attribute, token)
  30. digest = send("#{attribute}_digest")
  31. return false if digest.nil?
  32. BCrypt::Password.new(digest).is_password?(token)
  33. end
  34. # Forgets a user.
  35. def forget
  36. update_attribute(:remember_digest, nil)
  37. end
  38. end