0

我是 node.js 的新手,对 LDAP 身份验证有所了解。这里我试图从搜索中检索员工 ID,但尽管传递的凭据已成功绑定,但没有获取任何搜索条目,不确定我在哪里误导。如果有人可以帮助我,那将是一个很大的帮助!

以下是代码片段的结果集:

阅读器绑定成功 搜索结果长度:0 搜索 retval:{"messageID":2,"protocolOp":"LDAPResult","status":0,"matchedDN":"","errorMessage":"","re​​ferrals": [],"controls":[]} 没有要绑定的唯一用户

ldapRoute.route('/ldap').post((req, res, next) => {	

	var result = "";
	 
	var email =req.body.email;

	var client = ldap.createClient({
        url: 'ldap://******'
	});

	var opts = {
		filter: '(sAMAccountName='+ email + ')',
		attributes: ['sAMAccountName']
		};
		
        
var username = 'ii' + "\\" + email;
	
client.bind(username, req.body.password, function(err) {
    if (err){
		result += "Reader bind failed " + err;
    res.send(result);
    return;
	
	}
	else{
    
    result += "Reader bind succeeded\n";
	}
	
	client.search('OU=emp,dc=i,dc=ac,dc=com', opts, function(err, searchRes) {
		
	var searchList = []

	if (err) {
    result += "Search failed " + err;
    res.send(result);
    return;
	}
	
searchRes.on("searchEntry", (entry) => {
    result += "Found entry: " + entry + "\n";
    searchList.push(entry);
	
	});
	
searchRes.on("error", (err) => {
    result += "Search failed with " + err;
    res.send(result);
	
	});
	
searchRes.on("end", (retVal) => {
    result += "Search results length: " + searchList.length + "\n";
    for(var i=0; i<searchList.length; i++)
    result += "DN:" + searchList[i].employeeID + "\n";
    result += "Search retval:" + retVal + "\n";
	
  if (searchList.length == 1)   {
    client.bind(searchList[0].employeeID, req.body.password, function(err) {
      if (err)
         result += "Bind with real credential error: " + err;
      else
        result += "Bind with real credential is a success";
		
		   res.send(result);
		});  // client.bind (real credential)
		
		} else { 
                        result += "No unique user to bind";
                        res.send(result);
                    }

         });  

		});  

 }); 

});

4

1 回答 1

0

问题出在过滤器中,由于某些奇怪的原因,“end”在点击“searchEntry”之前被触发,调试它帮助我解决了这个问题。

//Filter
var opts = {
 filter: '(sAMAccountName=' + email+')',
 scope: 'sub',
 attributes: ['employeeID']
 }; 

//Search
client.search('OU=empl,dc=ii,dc=ac,dc=in', opts, function(err, searchRes) 
{
   if (err) 
 {   
   result += "Search failed " + err;    
   res.send(result); 
   return;
 }else{
searchRes.on("searchEntry", (entry) => 
 {
   result += "Found entry: " + entry.object.employeeID;
   res.send(result);
 }
 / ........../
} });
于 2020-06-01T14:57:45.133 回答