Recently I was playing around with Passport.js in an Express application. I created a login route that logged like that:
passport.authenticate('local', { successRedirect: '/app', failureRedirect: '/login', failureFlash: false });
Everything worked fine and I could login to my application but I also wanted to show a message when the login fails. So I changed my route to:
passport.authenticate('local', { successRedirect: '/app', failureRedirect: '/login', failureFlash: true });
Instead of redirect back to the login page I got this exception:
Object #<IncomingMessage> has no method 'flash' undefined TypeError: Object #<IncomingMessage> has no method 'flash' at allFailed
The solution for this is simple. I forgot to include the connect-flash module that provides the flash method. So I changed my startup code:
var flash = require('connect-flash'); app.use(cookieParser()); app.use(flash());
Even so the solution is quite simple and somehow obvious. It doesn’t seem right that changing a property to true introduces the need for a new middleware.