2016-08-04 95 views
0

我是ExpressJS的新手,如果他的ip(存儲在數據庫中)的失敗登錄次數超過了允許的最大數量,我需要刪除與用戶的連接,但是我找不到有關如何做這個。它看起來像server.close()的作品,但據我所知,它關閉了整個服務器,而不僅僅是一些連接。那麼從ExpressJS中間件中斷開連接的方式是什麼?ExpressJS拖放連接

+1

雖然它不阻止用戶發送數據,但您可以直接調用'res.end',響應將是一個「空白」html文件,這將具有幾乎相同的效果。 – DrakaSAN

+0

@DrakaSAN謝謝,它確實有效,可能正是我所需要的 – snowfinch27

+1

我可能會在最後失敗的嘗試中用客戶端cookie,以及您做它時的日期時間。然後添加自定義中間件來檢查該cookie並按照DrakaSAN的建議進行操作。這意味着您可以在執行更復雜的請求處理之前將該中間件放入,而不會將查詢發送到您的數據庫中。客戶可以阻止它或手動清除它,如果當然,所以它不應該是你唯一的檢查。只是一個想法。 – Mic

回答

1

ExpressJS不提供到瀏覽器的連接,只處理HTTP(S)請求,因此無法刪除它。套接字提供,但假設那不是你的情況。

在這種情況下,您可以發送回覆消息,如'已達到最大登錄嘗試次數。請在*分鐘後重試。也許隱藏登錄表單。

+0

謝謝,我可以使用NodeJS的套接字? – snowfinch27

+0

當然你可以,在這裏很好的lib:[socket.io](http://socket.io/)。但是,你需要套接字的目的是什麼? –

+0

我需要根據失敗登錄的次數(來自數據庫)關閉單個用戶的連接,現在我無法找出另一種方式,我非常感謝任何幫助 – snowfinch27

3

另一種「丟棄」連接的方法是立即呼叫res.end(),這將發送一個空的答案。

唯一的缺點是請求仍然會經歷任何以前的中間件,所以它無法保護針對中間件的DoS攻擊,並且不會像丟棄整個連接那樣有效,因爲DDoS攻擊。