nodejs passport ldapauth“无法读取”属性的undefined“

我正尝试使用passport-ldapauth和express来validationLDAP服务器。

使用ldap url(ldap:// myserver …)进行身份validation的工作正常,但是使用ldaps可以获得:

 TypeError:无法读取未定义的属性'on'
    在setupSocket(... \ ldapauth-fork \ node_modules \ ldapjs \ lib \ client \ client.js:111:14)
    在Client._connect(... \ ldapauth-fork \ node_modules \ ldapjs \ lib \ client \ client.js:742:3)
    在新客户端(... \ ldapauth-fork \ node_modules \ ldapjs \ lib \ client \ client.js:247:22)
    在Object.createClient(... \ ldapauth-fork \ node_modules \ ldapjs \ lib \ client \ index.js:60:12)
    在新的LdapAuth(... \ ldapauth-fork \ lib \ ldapauth.js:129:28)
    在handleAuthentication(... \ passport-ldapauth \ lib \ passport-ldapauth \ strategy.js:140:10)
    在Strategy.authenticate(... \ passport-ldapauth \ lib \ passport-ldapauth \ strategy.js:175:33)
    尝试(... \ passport \ lib \ middleware \ authenticate.js:341:16)
    在身份validation(... \ passport \ lib \ middleware \ authenticate.js:342:7)
    在Layer.handle [作为handle_request](... \ express \ lib \ router \ layer.js:82:5)

我的代码基本上是这样的:

... passport.use(new LdapStrategy({ server: { url: 'ldaps://myserver:636', searchBase: '...', searchFilter: '(uid={{username}})', tlsOptions: { ca: [ fs.readFileSync('myCAcert.pem') ] } }, session: false, usernameField:'u', passwordField:'p' }, function(user, done) { console.log("Interna: \nOK"); console.log("u:"); console.log(user.cn); return done(null, user); })); app.use('/login',passport.authenticate('ldapauth', { session:false, successRedirect:'/accessed', failureRedirect: '/accessfail' } )); app.use('/accessed',function (req,res,next){ res.send("User OK"); }); app.use('/accessfail',function (req,res,next){ res.send("User MAL !!!!!!!"); }); app.listen(3336); 

我的图书馆版本是:

  express@4.11.2,护照@ 0.2.1,护照-dapauth @ 0.3.0 

有人可以帮助我吗?

谢谢。

       

网上收集的解决方案 "nodejs passport ldapauth“无法读取”属性的undefined“"

最后,我可以解决这个问题。

ldapauth-fork中使用的ldapjs版本无法使用ldaps url。

解决scheme是:

  1. 从ldapauth-fork中使用ldapauth-fork(在node_modules下的其他node_modules目录下的passport-ldap下为我的用户!!!!!!)使用以下命令从ldapauth-fork中删除ldapjs:

    npm rm ldapjs

  2. 使用以下命令从github安装新版本:

    npm安装git://github.com/mcavage/node-ldapjs.git

FDO。

在使用SSL时,这只会在节点0.12和io.js中发生,请参阅ldapjs问题 。 您可以在您的项目package.json添加对未发布版本的依赖关系:

 { "dependencies": { "ldapjs": "mcavage/node-ldapjs", "ldapauth-fork": "2.3.1" } }