Module: Devise::Models::PamAuthenticatable::ClassMethods

Defined in:
lib/devise_pam_authenticatable/model.rb

Instance Method Summary collapse

Instance Method Details

#authenticate_with_pam(attributes = {}) ⇒ Object



54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
# File 'lib/devise_pam_authenticatable/model.rb', line 54

def authenticate_with_pam(attributes = {})
  return nil unless attributes[:password]
  if ::Devise.usernamefield && attributes[:username]
    resource = find_by(::Devise.usernamefield => attributes[:username])

    if resource.blank?
      resource = new
      resource[::Devise.usernamefield] = attributes[:username]
    end
  elsif ::Devise.emailfield
    return nil unless attributes[:email]
    resource = find_by(::Devise.emailfield => attributes[:email])

    if resource.blank?
      resource = new
      if ::Devise.check_at_sign && ::Devise.usernamefield && attributes[:email].index('@').nil?
        # use email as username
        resource[::Devise.usernamefield] = attributes[:email]
      else
        resource[::Devise.emailfield] = attributes[:email]
      end
    end
  else
    return nil
  end

  # potential conflict detected
  resource = resource.pam_on_filled_pw(attributes) if resource.respond_to?('password') && resource.password.present?

  return nil unless resource && resource.try(:valid_pam_authentication?, attributes[:password])
  if resource.new_record?
    resource.pam_setup(attributes)
    resource.save!
  end
  resource
end