根据条件,我需要销毁用户当前的会话,并将其重定向到带有消息的登录页面。我使用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语句,那么我没有收到任何错误,但是没有显示该消息。
答案 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 会话正常工作