Yii does not have an LDAP class itself, but its very easy to implement LDAP in the stock UserIdentity class.
To do so, open your protected/components/UserIdentity.php and remove or comment out the code in the authenticate() method, before replacing it with this:
$options = Yii::app()->params['ldap']; $dc_string = "dc=" . implode(",dc=",$options['dc']); $connection = ldap_connect($options['host']); ldap_set_option($connection, LDAP_OPT_PROTOCOL_VERSION, 3); ldap_set_option($connection, LDAP_OPT_REFERRALS, 0); if($connection) { $bind = ldap_bind($connection, "uid={$this->username},ou={$options['ou']},{$dc_string}", $this->password); if(!$bind) $this->errorCode = self::ERROR_PASSWORD_INVALID; else $this->errorCode = self::ERROR_NONE; } return !$this->errorCode;
Once you have done this, open up your configs/main.php file, and add the following to the 'params' array at the bottom of the file:
'ldap' => array( 'host' => 'hostname', 'ou' => 'organisational-unit', // such as "people" or "users" 'dc' => array('example','com'), ),
Replace the host with the hostname of the LDAP server, ou with the organisational unit you want to authenticate against (most LDAP servers use a broad terminology, such as "people"), and dc with the base DN. (For example array("ucla","edu") // ucla.edu)
Total 10 comments
i am trying to use adLDAP but i am having errors, can you provide more information about how to use it
If you use active directory then:
In UserIdentity.php
main.php
help... I generated the following error: ldap_bind() [function.ldap-bind]: Unable to bind to server: Invalid credentials
Should uncomment the following line: Before Code ;extension = php_ldap.dll
Rate Code: extension = php_ldap.dll
only, or should I see other extensions that I have to move?
thanks for your reply, as I php_ldap.dll or php_ldap.so? where I can get in that directory and go?
I generated the following error: Fatal error: Call to undefined function ldap_connect() that extention library or should I include? urgent help please! = D fact identical to the example code
I was just looking for this and this worked like a charm!
Thank you.
If it is just for validation you can aswell use the native LDAP functions of php without having to download/extract classes from another framework (and without exposing the admin passwd of the ldap server).
I have something along the line of the following (wrapped conveniently on a try/catch block in case the ldap connection cannot be established) working for about 1 year with no problem:
yes it's works. fyi, ldap server configuration may vary, i use uid instead of cn.
$ldap->bind("uid=".$this->username.",ou=People,dc=blahblah,dc=com", $this->password);thanks!
You guys should take a look at this: http://adldap.sourceforge.net/
I've done the same thing with 6 lines of code. Couldn't be simpler! :)
Leave a comment
Please login to leave your comment.