ldapjs连接在一段时间后超时
ldapjs connection times out after certain period of time
我有一些关于使用 LDAPjs 的 LDAP 存储库中的 searchEntry 的问题。我对 LDAP 不是很熟悉,因此我可能在客户端实现中遗漏了一些东西。问题是在一段时间后 LDAP 没有来自 LDAP 服务器的响应,只是没有 none 回调被调用。
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
传递,并且不要按照您已经完成的方式解除绑定。我想这也会阻碍重新连接。搜索成功后才能解绑
这段代码对我有用:(当然这些值是虚拟的)
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);
});
}
});
}
});
我有一些关于使用 LDAPjs 的 LDAP 存储库中的 searchEntry 的问题。我对 LDAP 不是很熟悉,因此我可能在客户端实现中遗漏了一些东西。问题是在一段时间后 LDAP 没有来自 LDAP 服务器的响应,只是没有 none 回调被调用。
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
传递,并且不要按照您已经完成的方式解除绑定。我想这也会阻碍重新连接。搜索成功后才能解绑
这段代码对我有用:(当然这些值是虚拟的)
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);
});
}
});
}
});