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



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
90
91
92
93
94
95
96
97
98
# File 'lib/devise_pam_authenticatable/model.rb', line 63

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.on_pam_conflict(attributes) if resource.is_pam_conflict

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