module Authlogic::Session::Password::InstanceMethods

Password related instance methods

Public Class Methods

new(*args) click to toggle source
Calls superclass method
# File lib/authlogic/session/password.rb, line 116
        def initialize(*args)
          if !self.class.configured_password_methods
            if login_field
              self.class.send(:attr_writer, login_field) if !respond_to?("#{login_field}=")
              self.class.send(:attr_reader, login_field) if !respond_to?(login_field)
            end
            
            if password_field
              self.class.send(:attr_writer, password_field) if !respond_to?("#{password_field}=")
              self.class.send(:define_method, password_field) {} if !respond_to?(password_field)

              self.class.class_eval "                private
                  # The password should not be accessible publicly. This way forms using form_for don't fill the password with the
                  # attempted password. To prevent this we just create this method that is private.
                  def protected_#{password_field}
                    @#{password_field}
                  end
", __FILE__, __LINE__
            end

            self.class.configured_password_methods = true
          end
          
          super
        end

Public Instance Methods

credentials() click to toggle source

Returns the #login_field / #password_field credentials combination in hash form.

Calls superclass method
# File lib/authlogic/session/password.rb, line 144
def credentials
  if authenticating_with_password?
    details = {}
    details[login_field.to_sym] = send(login_field)
    details[password_field.to_sym] = "<protected>"
    details
  else
    super
  end
end
credentials=(value) click to toggle source

Accepts the #login_field / #password_field credentials combination in hash form.

Calls superclass method
# File lib/authlogic/session/password.rb, line 156
def credentials=(value)
  super
  values = value.is_a?(Array) ? value : [value]
  if values.first.is_a?(Hash)
    values.first.with_indifferent_access.slice(login_field, password_field).each do |field, value|
      next if value.blank?
      send("#{field}=", value)
    end
  end
end
invalid_password?() click to toggle source
# File lib/authlogic/session/password.rb, line 167
def invalid_password?
  invalid_password == true
end

Private Instance Methods

add_general_credentials_error() click to toggle source
# File lib/authlogic/session/password.rb, line 216
def add_general_credentials_error
  error_message = 
  if self.class.generalize_credentials_error_messages.is_a? String
    self.class.generalize_credentials_error_messages
  else
    "#{login_field.to_s.humanize}/Password combination is not valid"
  end
  errors.add(:base, I18n.t('error_messages.general_credentials_error', :default => error_message))
end
authenticating_with_password?() click to toggle source
# File lib/authlogic/session/password.rb, line 172
def authenticating_with_password?
  login_field && (!send(login_field).nil? || !send("protected_#{password_field}").nil?)
end
find_by_login_method() click to toggle source
# File lib/authlogic/session/password.rb, line 208
def find_by_login_method
  self.class.find_by_login_method
end
generalize_credentials_error_messages?() click to toggle source
# File lib/authlogic/session/password.rb, line 226
def generalize_credentials_error_messages?
  self.class.generalize_credentials_error_messages
end
invalid_password() click to toggle source
# File lib/authlogic/session/password.rb, line 200
def invalid_password
  @invalid_password
end
invalid_password=(value) click to toggle source
# File lib/authlogic/session/password.rb, line 204
def invalid_password=(value)
  @invalid_password = value
end
login_field() click to toggle source
# File lib/authlogic/session/password.rb, line 212
def login_field
  self.class.login_field
end
password_field() click to toggle source
# File lib/authlogic/session/password.rb, line 230
def password_field
  self.class.password_field
end
validate_by_password() click to toggle source
# File lib/authlogic/session/password.rb, line 176
def validate_by_password
  self.invalid_password = false
  
  errors.add(login_field, I18n.t('error_messages.login_blank', :default => "cannot be blank")) if send(login_field).blank?
  errors.add(password_field, I18n.t('error_messages.password_blank', :default => "cannot be blank")) if send("protected_#{password_field}").blank?
  return if errors.count > 0

  self.attempted_record = search_for_record(find_by_login_method, send(login_field))
  if attempted_record.blank?
    generalize_credentials_error_messages? ?
      add_general_credentials_error :
      errors.add(login_field, I18n.t('error_messages.login_not_found', :default => "is not valid"))
    return
  end

  if !attempted_record.send(verify_password_method, send("protected_#{password_field}"))
    self.invalid_password = true
    generalize_credentials_error_messages? ?
      add_general_credentials_error :
      errors.add(password_field, I18n.t('error_messages.password_invalid', :default => "is not valid"))
    return
  end
end
verify_password_method() click to toggle source
# File lib/authlogic/session/password.rb, line 234
def verify_password_method
  self.class.verify_password_method
end