所以,我的应用程序通过ldap服务器使用登录。一旦通过身份验证,我就会在我的数据库上登录或创建用户,然后继续我的应用程序。
但是,当用户无法使用ldap(无效凭据或其他任何内容)登录时,我尝试显示Flash消息,但我无法按照文档所述的方式进行操作。
我使用机车js作为框架,所以我想继续使用这个路由:
routes.js
this.match('/', 'pages#homepage',{ via: 'GET' });
this.match('login', passport.authenticate('ldapauth', {
successRedirect : '/dashboard',
failureRedirect : '/',
failureFlash : true
}) ,{ via: 'POST' });
pagesController.js
pagesController.homepage = function() {
this.title = 'title';
this.render('',{messageRedirect: this.req.flash('messageRedirect')});
};
.ejs
<% if (messageRedirect.length>0) { %>
<div class="alert alert-danger"><%= messageRedirect %></div>
<% } %>
passport.js
passport.use(new LdapStrategy( {
server: {
url: config.ldap.url,
bindDn: config.ldap.bindDn,
bindCredentials: config.ldap.bindCredentials,
searchBase: config.ldap.searchBase,
searchFilter: config.ldap.searchFilter,
searchAttributes: config.ldap.searchAttributes,
tlsOptions: {
ca: [
fs.readFileSync(config.ssl.cert)
],
rejectUnauthorized: false
}
}
}, function(ldapUser, done){
var queryUser = {...};
user.getByUsername(queryUser, function(err,res){
if (err) {
return(err,null);
}
// if we don't find the user, it's his first attempt to login and we have to add him in the base
if(res.length==0){
user.create( queryUser, function(err,res){
if (err){
return (err,null);
}
});
var returnUser = {...};
return done(null,returnUser,{
message: 'Created and logged in Successfully'
});
}
else{
var returnUser = {...};
return done(null, returnUser, {
message: 'Logged In Successfully'
});
}
});
}
));
我遇到的问题是,如果ldap登录失败,则不会调用验证回调,因此我无法通过它显示登录失败。 闪存否则可以工作,因为它适用于其他几个页面。它甚至可以在此页面上运行(例如,当用户尝试访问未连接的页面时),但不是因为登录失败。 我尝试了很多其他的东西,但这是我唯一确定的部分。
我可以再次介绍&#39; /#39;显示错误的路线,但我想要ldap一个,这应该更准确。
答案 0 :(得分:3)
passport-ldapauth在LDAP身份验证失败时设置消息,如果未定义类型,则Passport.js then puts the message to req.flash
使用error
作为密钥(passport-ldapauth
就是这种情况)。< / p>
致电passport.authenticate
时,您可customize the messages。如果使用Microsoft AD,您可以customize some additional messages
因此,要获取失败消息,这应该有效:
this.render('', {
messageRedirect : this.req.flash('messageRedirect'),
messageLdapError : this.req.flash('error')
});