Express: req.flash() requires sessions
11,123
Solution 1
The issue was with how my view was getting rendered (using req.flash data)
Changing this:
loginShow: function(req, res){
res.render('login', { message: req.flash });
}
To this:
loginShow: function(req, res){
res.render('login', { message: req.flash() });
}
Fixed the error and causes connect-flash to act as expected.
Solution 2
Is your redis-server running? Try
redis-server
This solved the issue for me.
Related videos on Youtube
Comments
-
Ash over 1 year
I'm having some problems getting connect-flash to work, the error message I'm getting is:
'Error: req.flash() requires sessions'
I've seen this can be because of the ordering of the app, but I'm not sure if this is the case here.
App.js:
var express = require('express'); var path = require('path'); var favicon = require('serve-favicon'); var logger = require('morgan'); var cookieParser = require('cookie-parser'); var bodyParser = require('body-parser'); var session = require('express-session'); var flash = require('connect-flash'); var passport = require('passport'); var app = express(); app.use(logger('dev')); app.use(bodyParser.json()); app.use(bodyParser.urlencoded({ extended: false })); app.use(cookieParser()); app.use(express.static(path.join(__dirname, 'public'))); app.use(session({secret: '{secret}', name: 'session_id', saveUninitialized: true, resave: true})); app.use(passport.initialize()); app.use(passport.session()); app.use(flash());
Routes etc. are below
flash generating code:
passport.authenticate('local', { failureRedirect: '/login', successRedirect: '/', failureFlash: true})
-
flaudreIn my case the RedisStore object in the store property of the express-session was wrongly configured (wrong port).
-
Nathan BertramSame here -- didn't have Redis running the background.
-