req.flash() 在 req.session.destroy() 之后不工作
req.flash() not working after req.session.destroy()
根据条件,我需要销毁用户的当前会话,并将他重定向到带有消息的登录页面。我使用 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()
});
}
使用这段代码,我得到了这个错误 - Error: req.flash() requires sessions
。如果我在 session.destroy
语句之前移动 flash 语句,那么我不会收到任何错误,但不会显示消息。
如果您查看 flash source,您可以看到此中间件 REQUIRE 会话才能工作
req.flash()
取决于有效的会话,因此如果您销毁该会话,则即时消息也会被销毁。
在我看来,创建一个单独的 "blocked" 页面并呈现它实际上可能更好,而不是将被阻止的用户重定向回登录页面(无论如何他们都无法登录) ):
req.session.save(function(){
res.render("/admin-panel/blocked");
});
作为(不太漂亮的)替代方法,您可以将查询字符串传递到登录页面,指示用户已被阻止:
res.redirect("/admin-panel/login?blocked=true");
并在登录模板中检查是否应显示 "you are blocked" 消息。
我意识到这是一个旧的 post,但以防万一它对某人有帮助。
看起来使用 req.logout();
就可以了,这使得 req.flash();
之后可以有效地调用。
"Node version": "14.16.1"
"express": "4.17.2"
"express-session": "1.17.2"
"passport": "0.5.2"
"connect-flash": "0.1.1"
"cookie-parser": "1.4.6"
根据条件,我需要销毁用户的当前会话,并将他重定向到带有消息的登录页面。我使用 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()
});
}
使用这段代码,我得到了这个错误 - Error: req.flash() requires sessions
。如果我在 session.destroy
语句之前移动 flash 语句,那么我不会收到任何错误,但不会显示消息。
如果您查看 flash source,您可以看到此中间件 REQUIRE 会话才能工作
req.flash()
取决于有效的会话,因此如果您销毁该会话,则即时消息也会被销毁。
在我看来,创建一个单独的 "blocked" 页面并呈现它实际上可能更好,而不是将被阻止的用户重定向回登录页面(无论如何他们都无法登录) ):
req.session.save(function(){
res.render("/admin-panel/blocked");
});
作为(不太漂亮的)替代方法,您可以将查询字符串传递到登录页面,指示用户已被阻止:
res.redirect("/admin-panel/login?blocked=true");
并在登录模板中检查是否应显示 "you are blocked" 消息。
我意识到这是一个旧的 post,但以防万一它对某人有帮助。
看起来使用 req.logout();
就可以了,这使得 req.flash();
之后可以有效地调用。
"Node version": "14.16.1"
"express": "4.17.2"
"express-session": "1.17.2"
"passport": "0.5.2"
"connect-flash": "0.1.1"
"cookie-parser": "1.4.6"