2017-07-17 58 views
0

基於一個條件,我需要銷燬用戶的當前會話,並將他重定向到一個帶有消息的登錄頁面。我用flash有一個只顯示一次的消息。在任何地方,除了這裏,我的應用程序都能正常工作,因爲這裏我使用req.session.destroy()之後的req.flashreq.flash()不工作後req.session.destroy()

我該如何做到這一點?我曾嘗試在req.session.destroy()之前放置req.flash(),但這不起作用,因爲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語句,那麼我不會收到任何錯誤,但是不會顯示消息。

回答

1

req.flash()取決於一個有效的會話,因此,如果你破壞那次會議上,閃光燈消息銷燬。

在我看來,創建一個單獨的「阻止」頁面並渲染它可能會更好,而不是將被阻止的使用重定向回登錄頁面(無論如何不能登錄):

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

作爲(不太漂亮)的替代,你可以通過查詢字符串到登錄頁面,指示用戶被封鎖:

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

和使用的登錄模板檢查,看如果它應該顯示「你被阻止」的消息。

+0

非常感謝。你的兩個選擇對我來說看起來相當不錯。 :) –

0

如果你看看你flash source可以看到,這個中間件REQUIRE會議工作

+0

謝謝。但我知道這一點,我已經使用會話。正如我所說,它在我的應用程序中無處不在。問題是它在調用'req.session.destroy()'後在回調中不起作用。 –

+0

在你調用'req.session.destroy()'之後,沒有'session'會被'flash'使用,所以你期望它如何工作? –

+0

有什麼方法可以使這項工作?你瞭解我的要求?如果用戶被阻止,我需要通過銷燬會話將其註銷,然後將其重定向回登錄屏幕。但是有了一條閃光信息,你已經被封鎖了。 –