这就是我设置护照-ldapauth策略的方法:
let OPT = {
server: {
url: 'ldap://****:389',
bindDN: "",
bindCredentials: "",
searchBase: 'ou=Users,dc=astron,dc=hu',
searchFilter: "(uid={{username}})"
},
usernameField: 'username',
passwordField: 'password',
};
passport.use(new LdapStrategy(OPT, function (user, done) {
if (user != null) {
return done(null, user);
} else return done(new Error("i dont know"), null)
}))
app.use(passport.initialize())
这就是使用它的地方:
async authenticate(req, res): Promise < boolean > {
return new Promise < boolean > ((resolve,
reject) => {
let authenticate: express.RequestHandler = <express.RequestHandler>passport.authenticate('ldapauth', (error, user, info) => {
if (error) {
return reject(error);
}
if (!user) {
return resolve(false);
}
req.user = user;
resolve(true);
});
authenticate(req, res,
null);
}
)
}
我得到了这个错误:
错误:getaddrinfo ENOTFOUND **** ****:389
在errnoException(dns.js:28:10)
在GetAddrInfoReqWrap.onlookup [as oncomplete](dns.js:76:26)
我的问题是为什么我会收到错误?我确定网址和用户名/密码是正确的。
答案 0 :(得分:0)
此错误只有一个含义,您的节点应用程序无法连接到ldap服务器。可能是您提供了正确的IP /主机,但无法从运行节点应用程序的计算机上访问它。
您可以尝试使用同一台计算机上的某些工具连接到ldap,看看它是否能够连接到服务器。
答案 1 :(得分:0)
开发时我遇到同样的错误。我使用restify(dd
)进行https调用,在控制台中显示let restify = require('restify')
错误而没有特定的上下文。
然后我切换到使用其他方法
ENOTFOUND
)require('https')
)我使用它们来对相同的API进行ajax调用。它没有错误。