So verwendet meine App eine Anmeldung über einen LDAP-Server. Sobald es authentifiziert ist, logge ich mich ein oder erstelle einen Benutzer in meiner Datenbank und fahre dann mit meiner App fort.Wie Flash-Nachricht bei der Anmeldung mit Pass anzeigen ldapauth
Ich versuche jedoch, eine Flash-Nachricht anzuzeigen, wenn der Benutzer nicht mit LDAP (ungültige Anmeldeinformationen oder was auch immer) einloggen kann, aber ich kann es nicht tun, wie die Dokumentation sagt.
Ich bin mit Lokomotive js als Rahmen, so würde Ich mag dieses Routing halten mit:
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'
});
}
});
}
));
Das Problem, das ich habe, ist, dass, wenn die LDAP-Anmeldung fehlschlägt, wird die Verifizierungs Rückruf nicht aufgerufen, so kann ich nicht Login Ausfälle durch sie angezeigt werden soll. Der Blitz funktioniert ansonsten, da er auf mehreren anderen Seiten funktioniert. Es funktioniert sogar auf dieser Seite (z. B. wenn der Benutzer versucht, auf eine Seite zuzugreifen, ohne verbunden zu sein), aber nur nicht für einen Login-Fehler. Ich habe viele andere Sachen ausprobiert, aber das ist der einzige Teil, von dem ich mir sicher bin.
Ich kann eine '/ wieder' Route einführen, um einen Fehler anzuzeigen, aber ich hätte gerne die ldap, die genauer sein sollte.
Danke. Ich sah die Anpassung von Nachrichten, aber ich wusste nicht, was ich in 'this.req.flash()' einfügen sollte. Ich konnte keinen Hinweis auf den Schlüssel für benutzerdefinierte Rückrufe finden, was nicht das ist, wonach ich suche, noch weniger für "Pass-ldapauth", ich habe "failureFlash" und "Nachricht" versucht, aber nicht "Fehler" als Schlüssel. Nun, das ist genau das, was ich gebraucht habe, da ich je nachdem, wie es fehlgeschlagen ist, eine Fehlermeldung ausgeben kann. –