我有一个非常简单的节点网站,我试图使用连接flash。我根本无法让flash数据工作
在我的应用程序中,我使用这个配置
app.use(cookieParser(config.secret));
app.use(session({ secret: config.secret, name: 'sid', cookie: { secure: true }}));
app.use(flash());
和我的login post route
app.post('/login',
passport.authenticate('local', {
successRedirect: '/',
failureRedirect: '/login',
failureFlash: true,
failureFlash: 'Invalid username or password.'
});
);
和我的login get route.
app.get('/login', function (req, res) {
res.locals.errors = req.flash();
console.log(res.locals.errors);
res.render('login', {
errors: res.locals.errors
});
});
应用程序本身工作正常,并且在成功的身份验证上设置会话。但是flash数据从来没有设置过,总是一个空对象。我甚至尝试过使用一条路由来设置flash数据和重定向,而重定向路由只是为了控制台记录flash消息。但这也是同样的事情。
我需要使用会话存储(mongo或redis)还是应该与内置的内存会话一起工作?
对我来说,这实际上不像是中间件问题。您确定在您试图检索flash消息之前已经存储了它们吗?
试着做req.flash('info', 'Flash is back!')
然后通过console.log(req.flash('info'))
写出来
中间件的排序是问题所在。