首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ldapjs处理client.search响应

ldapjs处理client.search响应
EN

Stack Overflow用户
提问于 2020-11-20 21:47:02
回答 1查看 248关注 0票数 0

我有以下绑定到LDAP服务器的代码,我想返回我在"interviewees“组中添加了"ab”的用户(代码取自ldapjs客户端api页面)。我可以看到我正在从服务器返回一个响应,其中包含预期的EventEmitter对象。在searchEntry对象上调用日志记录console.log()时,我希望看到有关用户的信息。我似乎没有searchEntry对象。我的用户DN是否正确?我现在不确定问题是与我的查询有关,还是我没有得到任何数据,或者我是否未能正确处理响应?

代码语言:javascript
复制
    const client = ldap.createClient({ url: 'ldap://' + LDAP_SERVER + ':' + LDAP_PORT });
    
    // Connect and bind to the Active Directory.
    const connectToClient = async () => {
      const secret = LDAP_SECRET_KEY;
      return await new Promise((resolve, reject) => {
        client.bind(LDAP_USER, secret, function (err, res) {
          if (err) {
            console.error(err);
            reject('Failed to connect to LDAP server');
          } else {
            resolve('Connected to LDAP server');
          }
        });
      });
    };
    
    onst searchADForUser = async () => {
      return await new Promise((resolve, reject) => {
        client.search('CN=ab,OU=interviewees,OU=Users,OU=interview,DC=interview,DC=workspace,DC=com', function (err, res) {
          if (err) {
            console.error(err);
            reject('Error searching LDAP server');
          } 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);
            });
            resolve(res);
          }
        });
      });
    };
    
    const handler = async (event) => {
      try {
        return responses.success(
          await connectToClient().then(async function(event) {
            console.log(event);
            await searchADForUser().then(function(event) {
              console.log(event);
            }).catch(function(event) {
              console.log(event);
            })
          }).catch(function(event) {
            console.log(event);
          })
        );
      } catch (err) {
        console.error(err);
        return responses.error(err);
      } finally {
        client.unbind();
      }
    };

active directory结构如下

EN

回答 1

Stack Overflow用户

发布于 2020-11-30 17:54:00

我遇到的中心问题是理解如何处理从搜索函数返回的EventEmitter对象。我需要在每个searchEntry事件上添加一个数组,然后只在end事件发生时才在resolve回调函数中返回该条目。上面的代码立即调用resolve,因此尚未处理任何searchEntry事件或end事件。

我现在使用的代码如下:

代码语言:javascript
复制
function (err, res) {
        if (err) {
          console.error(err);
          reject(new Error('Error retrieving users from Active Directory'));
        } else {
          const entries = [];
          res.on('searchEntry', function (entry) {
            entries.push(entry);
          });
          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);
            if (result.status !== 0) {
              reject(new Error('Error code received from Active Directory'));
            } else {
              resolve(entries);
            }
          });
        }
      }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64930588

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档