blankammo
blankammo

Reputation: 119

Devise ldap authenticable does not lookup correctly

I am trying to get user properties from ldap on rails + devise_ldap_authenticatable (devise_ldap_authenticatable 0.8.1, rails 3.2.14)

Blow is my configuration

devise.rb

config.ldap_logger = true
config.ldap_create_user = true
config.ldap_config = "#{Rails.root}/config/ldap.yml"

ldap.yml (./config/ldap.yml)

authorizations: &AUTHORIZATIONS
 group_base: OU=Employee,OU=Person,DC=TEST,DC=AD
 required_groups:
  - CN=users,OU=Employee,OU=Person,DC=TEST,DC=AD

 require_attribute:
  objectClass: inetOrgPerson
  authorizationRole: postsAdmin

development:
 host: 192.168.1.10
 port: 389
 attribute: CN
 base: OU=Employee,OU=Person,DC=TEST,DC=AD
 ssl: false

user.rb

devise :ldap_authenticatable, :registerable, revoerable, 
       :rememberable, :trackable, :validatable
before_save :get_ldap_email

def get_ldap_email
   self.email = Devise::LDAP::Adapter.get_ldap_param(self.username, "mail")
end

and my LDAP(AD) status is

CN=12345678,OU=Employee,OU=Person,DC=TEST,DC=AD is exist
and it has mail attribute => "[email protected]"

The Login process was good But It didn't get any properties

log is ...

User Load (0.3ms)  SELECT `users`.* FROM `users` WHERE `users`.`username` = '12345678'    ORDER BY created_at DESC LIMIT 1
LDAP: LDAP dn lookup: CN=12345678
LDAP: LDAP search for login: CN=12345678
LDAP: LDAP search yielded 0 matches
LDAP: Authorizing user [email protected]
LDAP: LDAP dn lookup: CN=12345678
LDAP: LDAP search for login: CN=12345678
LDAP: LDAP search yielded 0 matches

and

Devise::LDAP::Adapter.get_ldap_param(self.username, "mail")
#It returns nil

Maybe the lookup address is wrong... (maybe CN=12345678,OU=Employee,OU=Person,DC=TEST,DC=AD is correct)

How can i fix it? How can i get user properties? (ex: mail ...)

Upvotes: 1

Views: 1873

Answers (1)

Oleg  Rogov
Oleg Rogov

Reputation: 720

Try this:

 def get_ldap_email
  self.email = Devise::LDAP::Adapter.get_ldap_param(self.username,"mail").first
 end

before_save :get_ldap_email

admin_user: your correct root dn

admin_password: you correct pw

In devise.rb

config.ldap_use_admin_to_bind = true

Upvotes: 4

Related Questions