2017-05-08 56 views
0

我正在使用Express js。在根文件夾中,我有一個public文件夾,其中包含子文件夾stylesheetsjavascripts,fonts,imageshtml。如果用戶未登錄,我想保護我的資產。例如,如果有人打開網絡瀏覽器並且沒有登錄請求http://localhost:3000/images/hello.jpg,那麼請求應該被重定向到登錄頁面。如何關閉app.use(express.static('/ public')); Express js

爲了達到此目的,我有條件地使用express.static(path.join(__dirname, '/public'))

挑戰1

登錄頁面還具有一些4-5資產(CSS和JS文件),其被放置在相同的公共文件夾。

挑戰2

我使用此代碼express.static(path.join(__dirname, '/public'))這樣的:

if(userIsLoggedIn){ 
    express.static(path.join(__dirname, '/public')) 
}else{ 
    //what to do here??? 
    //I need a code here which makes public folder as non-static folder 
} 

例如,我們有兩個用戶A和B的用戶使用不同的計算機。用戶A正在成功登錄,並且在服務器上,我們將public文件夾設置爲static,但用戶B尚未登錄,他現在直接訪問資產並且他可以訪問。

發生這種情況是因爲我們沒有將用戶基礎上的公用文件夾設置爲靜態,因此如果有任何用戶成功登錄,我們會將其設置爲靜態。

+0

添加中間件以檢查所有受保護資產之前的身份驗證。 – krrish

回答

2

您可以在express.static之前添加額外的中間件來強制用戶驗證。

var VerifyUser = require('./verifyuser'); 
app.use(VerifyUser, express.static(__dirname + '/public')); 


//VerifyUser code 
module.exports = function(req, res, next) { 
    if(user.isLogged) 
     next(); 
    else 
    next(err); //presume you have some error handler middleware 
}; 
0

快速的方法是簡單地mkdir一個空目錄並指向它。或者添加文件,你不介意公開。

express.static(path.join(__dirname, '/someemptydirectory'))