2017-08-23 217 views
0

这是我建立了我的护照ldapauth策略:护照ldapauth:错误:的getaddrinfo ENOTFOUND

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

,我得到这个错误:

Error: getaddrinfo ENOTFOUND **** ****:389

at errnoException (dns.js:28:10)

at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:76:26)

我的问题是为什么我得到错误?我确定网址和用户名/密码是正确的。

回答

0

此错误只有一个含义,您的节点应用程序无法连接到ldap服务器。可能是你正在给正确的IP /主机,但它不能从正在运行节点应用程序的机器访问。

您可以尝试使用同一台计算机上的一些工具连接到ldap,并查看它是否能够连接到服务器。

+0

谢谢你我会研究它 –

0

我在开发时有同样的错误。我使用restify(let restify = require('restify'))进行https调用,在控制台中显示ENOTFOUND没有特定上下文的错误。 后来我切换使用另一种方法

  1. HTTPS(require('https')
  2. XHR(const XMLHttpRequest = require('xhr2')

我同时使用,使Ajax调用相同的API。它工作没有错误。