Javascript req.session.destroy()之后req.flash()不工作
根据条件,我需要销毁用户的当前会话,并将其重定向到带有消息的登录页面。我使用Javascript req.session.destroy()之后req.flash()不工作,javascript,node.js,session,express,flash-message,Javascript,Node.js,Session,Express,Flash Message,根据条件,我需要销毁用户的当前会话,并将其重定向到带有消息的登录页面。我使用flash只显示一次消息。在任何地方,这都可以在我的应用程序上正常工作,除了这里,因为这里我在req.session.destroy()之后使用req.flash 我怎样才能做到这一点?我曾尝试将req.flash()放在req.session.destroy()之前,但这不起作用,因为req.session.destroy()会清除我们刚刚存储flash消息的会话。谢谢 if( req.session.admin
flash
只显示一次消息。在任何地方,这都可以在我的应用程序上正常工作,除了这里,因为这里我在req.session.destroy()之后使用req.flash
我怎样才能做到这一点?我曾尝试将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()
});
}
通过这段代码,我得到了这个错误-错误:req.flash()需要会话。如果我在session.destroy
语句之前移动flash语句,那么我不会得到任何错误,但不会显示消息。如果您查看,您可以看到此中间件需要会话才能工作req.flash()
取决于有效的会话,因此如果您销毁该会话,闪存信息也会被销毁
在我看来,实际上最好创建一个单独的“阻止”页面,并呈现该页面,而不是将被阻止的页面重定向回登录页面(他们无论如何都无法登录):
作为一种(不太美观的)替代方法,您可以向登录页面传递一个查询字符串,指示用户已被阻止:
res.redirect("/admin-panel/login?blocked=true");
并在登录模板中进行检查,查看是否应显示“您被阻止”消息。谢谢。但我知道这一点,我已经在使用会话。正如我提到的,在我的应用程序中,它在任何地方都可以正常工作。问题是,在调用req.session.destroy()
后,它在回调中不起作用。在调用req.session.destroy()
后,没有会话中的可供flash
使用,那么您希望它如何工作?有什么方法可以使它工作吗?你明白我的要求吗?如果用户被阻止,我需要通过破坏他们的会话将他们注销,然后将他们重定向回登录屏幕。你可以实现类似的机制,例如使用cookies
,但是使用flash
,你不能,因为它需要很多会话时间。我觉得你的两个选择都很好。:)
res.redirect("/admin-panel/login?blocked=true");