Active Directory findUser函数报错:TypeError无法转换undefined/null为对象
ActiveDirectory findUser 报错排查思路
问题详情
业务代码
var ad = new ActiveDirectory(adConfig); ad.authenticate(username, password, function (err, auth) { if (err) { console.error("ERROR : " + JSON.stringify(err)); res.send(false); return; } if (auth) { console.log("User " + username.split('\\')[1] + " authenticated"); ad.findUser(username.split('\\')[1], function (err, user) { //More code here } } });
报错信息
activedirectory.js:416
delete result.controls; // Remove the controls array returned as part of the SearchEntry
^
TypeError: Cannot convert undefined or null to object
库中报错代码
function onSearchEntry(entry) { log.trace('onSearchEntry(%j)', entry); console.log('entry', entry); var result = entry.object; delete result.controls; // Remove the controls array returned as part of the SearchEntry ... }
当前entry对象类型为SearchResultEntry [LdapMessage] {...},该对象不存在object属性,导致result为undefined,进而触发delete操作的类型错误。
排查思路
- 检查LDAP返回条目结构:在
onSearchEntry函数中打印完整的entry对象,确认AD服务器返回的搜索条目是否有其他存储用户数据的属性(比如entry.raw或其他字段),判断是否是库对返回结构的预期出现偏差。 - 核对
findUser参数格式:当前传入的是剥离域名后的纯用户名,部分AD环境要求查询用户时传入完整格式(如user@domain.com或DOMAIN\user),尝试传入完整用户名后观察返回结果是否正常。 - 验证库版本兼容性:不同版本的activedirectory库对LDAP条目解析逻辑可能不同,查看当前版本的issue记录,或升级到最新稳定版,确认是否是已知版本bug。
- 检查AD连接权限:确认用于连接AD的账号是否拥有读取目标用户信息的权限,权限不足可能导致返回的条目不完整,缺少预期的
object属性。 - 排查目标用户属性:确认AD中目标用户的属性是否完整,部分特殊账号(如内置管理员)的属性结构可能与普通用户不同,尝试查询其他普通用户看是否会出现相同问题。
内容的提问来源于stack exchange,提问作者IAyestaran
相关产品推荐
相关产品推荐

