在Ldap.js中搜索

Search in Ldap.js

本文关键字:搜索 js Ldap      更新时间:2023-09-26

我试图在我的node.js代码中使用Ldap.js的搜索方法。但这行不通。下面是我的代码:

searchFunc : function (){
            console.log('inside search');
            client.bind('cn=Manager,dc=foo,dc=com', kredito231, function(err) {
                if (err) {
                    console.log(err);
                    client.unbind();
                    return;
                }
                var opts = {
                    filter: (('Email=*@foo.com'))
                } ;
                 //This search works correct:
                //client.search( 'cn=x,ou=users' + ',' + 'dc=foo,dc=com', function(err,res){
                //This one doesn't work. But everything is done according api
                client.search('dc=foo,dc=com', opts, function(err, res) {
                    res.on('searchEntry', function(entry) {
                        console.log('hit');
                        console.log('entry: ' + JSON.stringify(entry.object));
                    });
                    res.on('searchReference', function(referral) {
                        console.log('referral: ' + referral.uris.join());
                    });
                    res.on('error', function(err) {
                        console.log('searchFailed') ;
                        console.error('error: ' + err.message);
                    });
                    res.on('end', function(result) {
                        console.log('4') ;
                        console.log('status: ' + result.status);
                    });
                });
            });
        }

当我使用使用dn name的搜索方法时,它返回正确的对象及其属性(执行res.on('searchEntry', function(entry)部分,因为它可以在Ldap中找到记录)。但是当我用上面定义的opt使用client.search('dc=foo,dc=com', opts, function(err, res)时,它总是转到分支4:res.on('end', function(result)并且从不返回0的错误状态。

Ldap的API文档

这对dc=foo,dc=com不起作用,因为LDAP目录中的条目没有属性Email,因此您的过滤器不匹配。LDAP目录中的条目'cn=x,ou=users,dc=foo,dc=com'可能具有此属性,这就是它工作的原因。

通过以下方式我们可以搜索用户数据

function searchUser() {
    var opts = {
         filter: '(objectClass=*)',  //simple search
        //  filter: '(&(uid=2)(sn=John))',// and search
        // filter: '(|(uid=2)(sn=John)(cn=Smith))', // or search
        scope: 'sub',
        attributes: ['sn']
    };
    client.search('ou=users,ou=system', opts, function (err, res) {
        if (err) {
            console.log("Error in search " + err)
        } else {
            res.on('searchEntry', function (entry) {
                console.log('entry: ' + JSON.stringify(entry.object));
            });
            res.on('searchReference', function (referral) {
                console.log('referral: ' + referral.uris.join());
            });
            res.on('error', function (err) {
                console.error('error: ' + err.message);
            });
            res.on('end', function (result) {
                console.log('status: ' + result.status);
            });
        }
    });
}