javascript - ldapjs 连接在一段时间后超时

标签 javascript node.js ldap ldapjs

我在使用 LDAPjs 的 LDAP 存储库中的 searchEntry 方面遇到一些问题。我对 LDAP 不太熟悉,因此我可能会在客户端实现中遗漏一些东西。问题是,在一段时间后 LDAP 没有来自 LDAP 服务器的响应,只是没有任何回调被调用。

  const ldapClient = ldap.createClient({
      url: 'ldap://some.ldap.server',
      timeout: 3000,
      connectTimeout: 6000
    });

  ldapClient.search('c=XX', opts, (err, res) => {
    if (err) {
      ldapClient.unbind(function(err) {
        if (err) {
          console.log(err)
        }
      });
      return next(null);
    }
  res.once('searchEntry', (entry) => {
    ldapClient.unbind(function(err) {
      if (err) {
      console.log(err)
      }
    });
    return next(entry);
  });

  res.on('error', (error) => {
    ldapClient.unbind(function(err) {
      if (err) {
      console.log(err)
      }
    });
    return next(null, new Error(error.message));
  });
});

最佳答案

在创建 LDAP 客户端时将 reconnect 标志传递为 true,并且不要按照您所做的方式取消绑定(bind)。我想这也会阻碍重新连接。搜索成功后才可以解除绑定(bind)。

这段代码对我有用:(当然这些值是虚拟​​的)

var ldap = require('ldapjs');
var tlsOptions = {
    host: 'example.com',
    port: '636',
    ca: [fs.readFileSync('./path/to/cert.pem')]
};
var client = ldap.createClient({
    url: 'ldaps://example.com:636',
    reconnect: true
    tlsOptions: tlsOptions
});

client.bind(username, password, function (err) {
    if (err) {
        console.log('Error occurred while binding');
    } else {
        var base = 'cn=admin,dc=example,dc=com';
        var search_options = {
            scope: 'sub',
            filter: '(&(objectClass=*)(CN=' + username + '))',
            attrs: 'attrs'
        };
        client.search(base, search_options, function (err, res) {
            if (err) {
                console.log('Error occurred while ldap search');
            } else {
                res.on('searchEntry', function (entry) {
                    console.log('Entry', JSON.stringify(entry.object));
                });
                res.on('searchReference', function (referral) {
                    console.log('Referral', referral);
                });
                res.on('error', function (err) {
                    console.log('Error is', err);
                });
                res.on('end', function (result) {
                    console.log('Result is', result);
                });
            }
        });
    }
});

关于javascript - ldapjs 连接在一段时间后超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39706086/

相关文章:

javascript - Safari 返回值 "normal"为 "line-height"样式

node.js - airbnb的hypernova工具可以用于angularjs web seo吗?

javascript - 从公共(public)文件夹中的脚本运行index.js中的函数

java - 使用 Ldap 对 Glassfish 进行基本身份验证

ldap - 如何在 LDAP 和 RDBMS 之间划分职责

javascript - 正则表达式在单词之间只允许一个空格

javascript - 将 onclick 事件附加到元素不起作用

javascript - 为什么这会在 Node.js 中使用 --harmony 抛出错误?

linux - pam_mkhomedir.so 不会在 CentOs 上创建主目录?

javascript - 下载名称中包含 '+' 字符的文件