2017-05-08 67 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'))