class ActiveModel::PasswordReset
Constants
- EXPIRATION_TIME
- VERSION
Attributes
email[R]
user[W]
Public Class Methods
find(token)
click to toggle source
# File lib/active_model/password_reset.rb, line 35 def self.find(token) email, digest, expires_at = verify_token(token) raise TokenExpired if Time.now.to_i > expires_at.to_i new(email: email).tap do |password_reset| raise EmailInvalid if password_reset.invalid? raise PasswordChanged if password_reset.send(:digest) != digest end end
Private Class Methods
generate_token(*args)
click to toggle source
# File lib/active_model/password_reset.rb, line 50 def self.generate_token(*args) Base64.urlsafe_encode64(message_verifier.generate(*args)) end
message_verifier()
click to toggle source
# File lib/active_model/password_reset.rb, line 46 def self.message_verifier Rails.application.message_verifier("password reset salt") end
verify_token(string)
click to toggle source
# File lib/active_model/password_reset.rb, line 54 def self.verify_token(string) message_verifier.verify(Base64.urlsafe_decode64(string)) rescue ActiveSupport::MessageVerifier::InvalidSignature, ArgumentError raise TokenInvalid end
Public Instance Methods
email=(email)
click to toggle source
# File lib/active_model/password_reset.rb, line 18 def email=(email) remove_instance_variable(:@user) if defined?(@user) @email = email end
token()
click to toggle source
# File lib/active_model/password_reset.rb, line 28 def token email = user.email digest = Digest::MD5.digest(user.password_digest) expires_at = Time.now.to_i + EXPIRATION_TIME self.class.generate_token([email, digest, expires_at]) end
user()
click to toggle source
# File lib/active_model/password_reset.rb, line 23 def user return @user if defined?(@user) @user = User.find_by(email: email) end
Private Instance Methods
digest()
click to toggle source
# File lib/active_model/password_reset.rb, line 60 def digest Digest::MD5.digest(user.password_digest) end
existence()
click to toggle source
# File lib/active_model/password_reset.rb, line 64 def existence errors.add(:email, :invalid) if user.blank? end