我正在使用Express JS。在根文件夹中,我有一个public
文件夹,其中包含子文件夹stylesheets
,javascripts
,fonts
,images
和html
。如果没有登录用户,我想保护我的资产。例如,如果某人打开Web浏览器并且没有登录,请要求http://localhost:3000/images/hello.jpg
请求,则应将请求重定向到登录页面。
为了实现此目的,我有条件地使用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
}
例如,我们有2个用户A和B。两个用户都使用不同的计算机。用户A正在成功进行登录,在服务器上,我们将public
文件夹设置为static
,但是用户B尚未完成登录,他现在直接访问资产,他可以访问。
这是因为我们没有将公共文件夹设置为用户静态文件夹,如果任何用户成功登录,我们都会使其变得静态。
您可以在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
};
一种快速的方法是简单地将一个空目录并指向它。或将您不介意公开的文件添加。
express.static(path.join(__dirname, '/someemptydirectory'))