Search code examples
expresspugpassport.jsconnect-flash

flash message in passport js


I have a problem with flash messages. I do not get an error messages on my page. please tell me where the error.

PS. Sorry for my English ;D

app.js

require: express, passport, pug, express-session, cookie-parser, connect-flash, body-parser...

var router = require('./router.js')(passport);
var initPassport = require('./passport-init.js');

var app = express();

app.set('views', __dirname + '/views');
app.set('view engine', 'pug');

app.use(cookieParser('secret'));
app.use(session({ cookie: { maxAge: 60000 }, secret: 'secret' }));
app.use(flash());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(passport.initialize());
app.use('/', router);

initPassport(passport);

router.js

var express = require('express');
var router = express.Router();

module.exports = function(passport) {

    router.get('/', function(req, res) {
       res.render('index', {
           title: 'index page'
       });
    });

    router.post('/auth',        
       passport.authenticate('local', {         
           successRedirect: '/',
           failureRedirect: '/',
           failureFlash: true
       })
    );

   return (router);
};

passport-init.js

var User = require('./user.js');
var LocalStrategy = require('passport-local').Strategy;

module.exports = function(passport) {

    passport.use('local', new LocalStrategy({ usernameField: 'email', passwordField: 'pass', passReqToCallback: true },

        function(email, pass, done) {
            User.findOne({ where: { email: email } }).then(function(err, user) {
                if (err) {
                    return done(err);
                }
                if (!user) { return done(null, false, { message: 'Incorrect username.' });
                }
                if (!user.validPassword(pass)) { return done(null, false, { message: 'Incorrect password.' });
                }
                return done(null, user);
            });
        }
    ));
};

and index.pug

include ./headers.pug

div(class="container")
    div(class="row head")
        div(class="col-xs-12")
            if message
                    p #{message}

    div(class="row body-left")
        div(class="col-xs-3")
            include ./auth.pug
        div(class="col-xs-9")

Solution

  • Remember that app.VERB('route', callback) are implemented for the respective HTTP request for example app.get('/', callback) is executed for GET request to the root directory. The app.use() works the same way but the difference is it is implemented for all requests irregardless of the path.

    What this means is you have only configured your express application to use flash() for all request but you did not actually tell flash when to flash messages.

    Connect flash makes the request flash() method available when it is used on requests, this method is what we use to flash errors.

    To flash error messages in the signup page, when an error occurs, you would put the following in your HTTP request callbacks:

    res.render('signup', {
        title: 'Sign-up Form',
        messages: req.flash('error')
    });