2016-08-02 36 views
0

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.

Antwort

3

passport-ldapauth legt die Nachrichten, wenn die LDAP-Authentifizierung fehlschlägt und Passport.js then puts the message to req.flasherror als den Schlüssel zu verwenden, wenn Typ nicht definiert ist (was der Fall mit passport-ldapauth ist).

Sie können customize the messages beim Aufruf passport.authenticate. Bei der Verwendung von AD Microsoft, können Sie wie erwähnt customize some additional messages im readme

Also, um die Fehlermeldungen zu erhalten diese funktionieren sollte:

this.render('', { 
    messageRedirect : this.req.flash('messageRedirect'), 
    messageLdapError : this.req.flash('error') 
}); 
+0

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. –