我在MEAN項目中一直使用express-sessions
(https://www.npmjs.com/package/express-sessions)以及angular-route
來管理用戶登錄/認證。一旦用戶登錄或註冊,他們的用戶數據(例如整個User
)被分配給一個會話,然後用戶被重定向到一個新頁面:#!/dashboard
。使用快速會話在MEAN應用程序中檢查有效會話的最佳方法是什麼?
爲了防止用戶訪問#!/dashboard
,而無需先註冊或登錄,我做一個快速的「會話確認」,我把它從我的角度控制器,它傳遞給角工廠,迅速地ping服務器 - 將端來檢查會話對象。
如果會話存在,我返回一個布爾值true
,如果會話不存在,我發送一個布爾型false
。然後我做了一個條件聲明:如果是,繼續並在#!/dashboard
頁面(用戶的會話有效)繼續抓取帖子或用戶數據等。如果爲false,則重定向到登錄頁面存在的/
(防止用戶訪問#!/dashboard
)。
這實現了我的目標,即防止用戶在瀏覽器中輸入/#!/dashboard
而未登錄/註冊,但這看起來像是一個昂貴的解決方案,並不是很乾淨。
有沒有一種更清潔或更好的方式來執行此「會話檢查」,以防止在沒有有效登錄會話的情況下訪問我的後端頁面?
我已經使用了快遞中間件,也許有一種方法可以快速檢查每個請求嗎?
有沒有人有任何關於如何改善我的會話檢查的建議?
如果我沒有錯,你正在做客戶端(角)的會話檢查。這是一個巨大的安全災難,等待發生,如果沒有很好地實施。 – Iceman
您的應用程序是否完全單獨分頁應用程序 –
@Iceman也許這是一個很大的安全問題 - 我仍在學習 - 更多信息:我檢查會話的方式是創建服務器路由,轉到後端,檢查在req對象中是否存在會話,如果是,則返回true,否則返回false(作爲變量「validSession」)。然後我在回調函數中有一條簡單的行,它在我的角度工廠中運行,一旦收到後端的響應:'if(!validSession){$ location.url('/'); };所以,如果會話無效,它會重定向到'/'頁面。你的方法看起來好多了,但是這種描述方式不安全? – natureminded