Node JS LDAP Auth User
authentication, ldap, node.js
Solution
In this case, you need `ldapClient` rather than `ldapServer`, this is the example code from the official doc:
var ldap = require('ldapjs');
ldap.Attribute.settings.guid_format = ldap.GUID_FORMAT_B;
var client = ldap.createClient({
url: 'ldap://127.0.0.1/CN=test,OU=Development,DC=Home'
});
var opts = {
filter: '(objectclass=user)',
scope: 'sub',
attributes: ['objectGUID']
};
client.bind('username', 'password', function (err) {
client.search('CN=test,OU=Development,DC=Home', opts, function (err, search) {
search.on('searchEntry', function (entry) {
var user = entry.object;
console.log(user.objectGUID);
});
});
});
Problem
I am creating a login authentication page, where a user would input there active directory username and password and using NodeJS I would check to see if it's valid, but I keep getting ``` [Error: LDAP Error Bad search filter] ``` or ``` [Error: Search returned != 1 results] ``` When I'm trying to search for the username and password, my code is below: I'm using: https://github.com/jeremycx/node-LDAP, let's say that the user entered a username of hhill ``` var ldap = require('LDAP'); var ldapServer = new ldap({ uri: 'ldap://batman.lan', version: 3}); ldapServer.open(function(error) { if(error) { throw new Error('Cant not connect'); } else { console.log('---- connected to ldap ----'); username = '(cn='+username+')'; ldapServer.findandbind({ base: 'ou=users,ou=compton,dc=batman,dc=lan', filter: username, password: password }, function(error, data) { if(error){ console.log(error); } else { console.log('---- verified user ----'); } }); } }); ``` Does anyone have any suggestions on what I'm doing wrong? UPDATE Here is the solution I came up with if anyone ever needs it, with the help of the answer below ``` var username = request.param('username'); var password = request.param('password'); var ldap = require('ldapjs'); ldap.Attribute.settings.guid_format = ldap.GUID_FORMAT_B; var client = ldap.createClient({ url: 'ldap://batman.com/cn='+username+', ou=users, ou=compton, dc=batman, dc=com', timeout: 5000, connectTimeout: 10000 }); var opts = { filter: '(&(objectclass=user)(samaccountname='+username+'))', scope: 'sub', attributes: ['objectGUID'] }; console.log('--- going to try to connect user ---'); try { client.bind(username, password, function (error) { if(error){ console.log(error.message); client.unbind(function(error) {if(error){console.log(error.message);} else{console.log('client disconnected');}}); } else { console.log('connected'); client.search('ou=users, ou=compton, dc=batman, dc=com', opts, function(error, search) { console.log('Searching.....'); search.on('searchEntry', function(entry) { if(entry.object){ console.log('entry: %j ' + JSON.stringify(entry.object)); } }); search.on('error', function(error) { console.error('error: ' + error.message); }); client.unbind(function(error) {if(error){console.log(error.message);} else{console.log('client disconnected');}}); }); } }); } catch(error){ console.log(error); client.unbind(function(error) {if(error){console.log(error.message);} else{console.log('client disconnected');}}); } ```