module Devise::Models::PasswordDisallowsFrequentChanges

Public Instance Methods

password_recent?() click to toggle source
# File lib/devise/secure_password/models/password_disallows_frequent_changes.rb, line 30
def password_recent?
  last_password = previous_passwords.first
  last_password&.fresh?(self.class.password_minimum_age)
end
validate_password_frequent_change() click to toggle source
# File lib/devise/secure_password/models/password_disallows_frequent_changes.rb, line 18
def validate_password_frequent_change
  if encrypted_password_changed? && password_recent?
    error_string = I18n.t(
      'secure_password.password_disallows_frequent_changes.errors.messages.password_is_recent',
      timeframe: precise_distance_of_time_in_words(self.class.password_minimum_age)
    )
    errors.add(:base, error_string)
  end

  errors.count.zero?
end

Protected Instance Methods

after_resource_initialized() click to toggle source
# File lib/devise/secure_password/models/password_disallows_frequent_changes.rb, line 52
def after_resource_initialized
  raise ConfigurationError, 'invalid type for password_minimum_age' \
    unless self.class.password_minimum_age.is_a?(::ActiveSupport::Duration)
end
before_resource_initialized() click to toggle source
# File lib/devise/secure_password/models/password_disallows_frequent_changes.rb, line 37
      def before_resource_initialized
        return if self.class.respond_to?(:password_previously_used_count)

        raise ConfigurationError, <<-ERROR.strip_heredoc

        The password_disallows_frequent_changes module depends on the
        password_disallows_frequent_reuse module. Verify that you have
        added both modules to your model, for example:

          devise :database_authenticatable, :registerable,
            :password_disallows_frequent_reuse,
            :password_disallows_frequent_changes
        ERROR
      end