NodeJS护照ldapauth "Cannot read 'on' property of undefined"



我正在尝试使用passport ldapauth和express对LDAP服务器进行身份验证。

使用ldap url的身份验证(ldap://myserver...)工作正常,但使用ldaps我得到:

TypeError:无法读取未定义的的属性"on"在setupSocket(…\ldapauth fork\node_modules\ldapjs\lib\client\client.js:111:14)在客户处_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\ldapaouth.js:129:28)在handleAuthentication(…\password ldapauth\lib\passport ldapauth\strategy.js:140:10)在Strategy.authenticate(…\password ldapauth\lib\passport ldapauth\Strategy.js:175:33)尝试时(…\password\lib\中间件\authenticate.js:341:16)在authenticate(…\password\lib\中间件\authenticate.js:342:7)在Layer.handle[as-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,passport@0.2.1,passport-ldapauth@0.3.0

有人能帮我吗?

谢谢。

终于可以解决这个问题了。

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

解决方案是:

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

    npm-rm-ldapjs

  2. 使用:从github安装新版本

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

FDO。

使用SSL时,只有Node 0.12和io.js才会出现这种情况,请参阅ldapjs问题。您可以在项目package.json:中为未发布的版本添加依赖项

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

相关内容

最新更新