tôi đang tạo ra một trang xác thực đăng nhập, nơi người dùng sẽ nhập có hoạt động tên thư mục và mật khẩu và sử dụng NodeJS tôi sẽ kiểm tra để xem nếu nó là hợp lệ, nhưng tôi tiếp tục nhận đượcNode JS LDAP Auth tài
[Error: LDAP Error Bad search filter]
hoặc
[Error: Search returned != 1 results]
Khi tôi đang cố gắng để tìm kiếm tên người dùng và mật khẩu, mã của tôi là dưới đây:
tôi đang sử dụng: https://github.com/jeremycx/node-LDAP, giả sử rằng người dùng đã nhập tên người dùng của 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 ----');
}
});
}
});
Có ai có đề xuất gì về những gì tôi đang làm không?
CẬP NHẬT
Dưới đây là giải pháp tôi đã đưa ra nếu có ai bao giờ cần nó, với sự giúp đỡ của các câu trả lời dưới đây
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');}});
}
Trong trường hợp đầu tiên, bộ lọc nào thực sự được truyền đến máy chủ? Trong trường hợp thứ hai, nhiều hơn một đối tượng khớp với các tham số tìm kiếm: có lẽ nó chỉ là một kết quả phù hợp. –