我正在尝试使用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。
解决方案是:
-
使用以下命令从ldapauth fork下的node_modules目录中删除ldapjs(在我的用户的node_modeles中passport ldap下的其他node_module目录下!!!!):
npm-rm-ldapjs
-
使用:从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"
}
}