我是node.js的新手,已经在某种程度上弄清楚了LDAP身份验证。这里我试图从搜索中检索员工 ID,但尽管传递的凭据已成功绑定,但没有获取任何搜索条目,不确定我在哪里被误导了。如果有人能帮助我,那将是一个很大的帮助!
下面是代码片段的结果集:
读取器绑定成功 搜索结果长度:0 搜索 retval:{"messageID":2,"protocolOp":"LDAPResult","status":0,"matchedDN":","errorMessage":","referrals":[],"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 succeededn";
}
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);
}
});
});
});
});
问题出在过滤器中,由于一些奇怪的原因,"结束"在点击"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);
}
/ ........../
} });