在req.session.destroy()之后req.flash()无效

时间:2017-07-17 09:58:37

标签: javascript node.js session express flash-message

根据条件,我需要销毁用户当前的会话,并将其重定向到带有消息的登录页面。我使用flash来显示一次只显示一条消息。无处不在,除了这里,我的应用程序运行正常,因为我在req.flash之后使用req.session.destroy()

我怎样才能做到这一点?我尝试在req.flash()之前放置req.session.destroy(),但这不起作用,我认为因为req.session.destroy()清除了我们刚存储Flash消息的会话。感谢。

   if( req.session.adminUser.blocked ){
        req.logout();
        req.session.destroy(()=>{
            req.flash("flashMessage", "You are blocked, Please contact admin");
            req.session.save(function(){
                res.redirect("/admin-panel/login");
                return false;
            });//session.save()
        });
    }

使用此代码,我收到此错误 - Error: req.flash() requires sessions。如果我在session.destroy语句之前移动flash语句,那么我没有收到任何错误,但是没有显示该消息。

2 个答案:

答案 0 :(得分:1)

req.flash()取决于有效会话,因此如果您销毁该会话,Flash消息也会被销毁。

在我看来,创建一个单独的“被阻止”页面实际上可能更好,并且渲染它,而不是将被阻止的用户重定向到登录页面(他们无论如何都无法登录):

req.session.save(function(){
  res.render("/admin-panel/blocked");
});

作为(不太漂亮)的替代方案,您可以将查询字符串传递给登录页面,指示用户已被阻止:

res.redirect("/admin-panel/login?blocked=true");

并使用登录模板中的检查来查看是否应显示“您被阻止”消息。

答案 1 :(得分:0)

如果查看flash source,您可以看到此中间件 REQUIRE 会话正常工作