Ldap JS节点给出超时错误

时间:2018-08-21 20:06:27

标签: javascript node.js vuejs2 ldap

我正在尝试在节点项目“ ldapjs”中使用ldap js库:“ ^ 1.0.2”。 我已经成功地与ldap服务器建立了连接并获得了结果。但是由于某种原因,当我尝试从ldap的UI调用服务时,出现超时错误。如果我尝试直接在chrome中使用后端服务(因为这是一个get服务),则效果很好,但是当我从ui代码尝试时,ldap服务就会关闭。我在控制台中收到超时错误。

我的后端在Node中,前端代码在Vue中。我正在使用axios来调用我的后端服务。

ldap代码:

function getUserLdapDetails(id) {
    return new Promise(async function (resolve, reject) {
        var client;
        try {
            var response = {};
            setTimeout(function () {
                resolve('Not able to get Ldap details');
            }, 5000);
            var tlsOption = {
                'rejectUnauthorized': true
            }
            client = ldap.createClient({
                url: server,
                tlsOptions: tlsOption
            });
            client.bind(userPrincipalName, password, (err, res) => {
                console.log("In Ldap Bind and connection is establised :" + client.connected);
                if (err) {
                    console.log(err);
                    return reject(err);
                }
            });
            var opts = {
                filter: "id=" + id,
                scope: "sub",
                attributes: [
                    "mail",
                    "sn",
                    "telephoneNumber",
                    "givenName"                   
                ]
            };
            client.search(searchOption, opts, function (err, res) {
                if (err) {
                    console.log(err);
                    resolve(response);
                }
                res.on("searchEntry", function (entry, end) {
                    response.mail = entry.object.mail;
                    response.lastName = entry.object.sn;
                    response.firstNme = entry.object.givenName;
                    response.phone = entry.object.telephoneNumber;
                    resolve(response);
                });
            });
        } catch (err) {
            console.log(err);
            return reject(err);
        } finally {
            client.unbind(function (err) {
                if (err) {
                    console.log(err);
                    return reject(err);
                }
            });
        }
    }).catch((err) => {
        console.log(err);
        return err;
    });
}

错误: enter image description here

1 个答案:

答案 0 :(得分:0)

最后,我找到了解决方案。有时,客户端会空转,并且在某些情况下,由于不同的原因,我们从ldap服务器获取了用于搜索的异常信息。

我发现甚至可以添加很多侦听器来监听这些事件。不幸的是,下面是一些文件。

  • 错误
  • 超时
  • connectError

以下是我要处理的更改

  1. 在创建客户端时添加了重新连接标志和时间限制

client = ldap.createClient({
                url: server,
                tlsOptions: tlsOption,
                timeLimit: 7000,
                reconnect: true
            });

  1. 添加了用于连接的事件侦听器,并在连接内部开始搜索。

 await client.on('connect', function () {
                client.bind(userPrincipalName, password, (err, res) => {
                    console.log("In Ldap Bind and connection is establised :" + client.connected);
                    if (err) {
                        console.log(err);
                        return reject(err);
                    }
                });

  1. 为超时和错误情况添加了事件侦听器,以处理这些情况并重新连接。

client.on('timeout', function (err) {
                console.log('Timeout .....' + err);                
            });
client.on('error', function (err) {
    console.warn('LDAP connection failed, it will reconnect', err);
});