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
有人可以帮助我吗?
谢谢。
最后,我可以解决这个问题。
ldapauth-fork中使用的ldapjs版本无法使用ldaps url。
解决scheme是:
-
从ldapauth-fork中使用ldapauth-fork(在node_modules下的其他node_modules目录下的passport-ldap下为我的用户!!!!!!)使用以下命令从ldapauth-fork中删除ldapjs:
npm rm ldapjs
-
使用以下命令从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" } }