2013-07-22 5 views
11

Bir kullanıcı girişi dizin kullanıcı adı ve şifre ile NodeJS kullanarak aktif Ben geçerli olup olmadığını görmek için kontrol verecek olan bir giriş kimlik doğrulama sayfasını oluştururken, ama benDüğüm JS LDAP Kimlik Doğrulama Kullanıcı

[Error: LDAP Error Bad search filter] 

almaya devam ya

Ben kullanıcı adı ve şifre aramak için çalışıyorum
[Error: Search returned != 1 results] 

, benim kod aşağıda: Ben kullanıyorum

: https://github.com/jeremycx/node-LDAP, diyelim ki kullanıcı bir kullanıcı adı yanlış girdim hakkında herhangi bir öneri var mı? İşte GÜNCELLEME

, sen ldapClient yerine ldapServer gerek bu durumda

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');}}); 
    } 
+0

? İkinci durumda, birden fazla nesne, arama parametrelerini eşleştirdi: belki de sadece bir eşleşme bekler. –

cevap

8

aşağıda cevabını yardımıyla, hiç kimse ihtiyacı varsa ile geldi çözümdür

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); 
    }); 
    }); 
}); 
+1

Yukarıdaki denedim, aşağıdaki hatayı alıyorum oSuchObjectError: 0000208D: NameErr: DSID-0310020A, sorun 2001 (NO_OBJECT), veri 0, en iyi eşleşme: \t 'OU = Kullanıcılar, OU = Newyork, DC = basingloc , DC = lan ' Bağlar, ancak arama başarısız olur. line search.on @sza – Sukh

+0

Bu sorunu çözdüğüm sadece düzeltilmiş sorunlar. Teşekkürler @zsong! –

7

@Suk: Bu resmi doc örnek kodudur G UPDATE çözümünüzü gönderdiğiniz için teşekkür ederiz; Ancak, UPDATE sayfanızda gönderdiğiniz kodla ilgili bir sorun var. Basit vakalar için çalışırken, daha büyük sorgularla, sonuçların çıktısını almadan önce açtığınızı göreceksiniz. Çözüm benim açımlarınızı search.on işlevlerine taşımaktı.

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'] 
    // This attribute list is what broke your solution 
    attributes: ['objectGUID','sAMAccountName','cn','mail','manager','memberOf'] 
}; 

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)); 
        } 
        client.unbind(function(error) {if(error){console.log(error.message);} else{console.log('client disconnected');}}); 
       }); 

       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');}}); 
       }); 

       // don't do this here 
       //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');}}); 
} 

En azından bu Active Directory aramalarıyla çözüm kullanırken keşfettim budur: İşte

UPDATE bir düzenleme olduğunu. memberOf kullanımım durumda girişlerin ÇOK döner ve keser erken yapılmakta, bu yüzden aşağıdaki hatayı başlamıştı: aslında sunucuya iletilir filtre birinci durumda,

error: 1__ldap://my.domain.com/,OU=Employees,OU=Accounts,DC=my,DC=domain,DC=com closed 
client disconnected