Express服务静态文件的基本authentication

我正在使用Express 4框架,我需要基本身份validation来提供静态文件。 这是我现在所拥有的:

app.use('/files', auth); app.use('/files', express.static(path.join(__dirname, 'files'))); 

这很好,如果我尝试访问/文件,但如果我写URL ../files/somefile.txt身份validation不需要,我可以访问该文件。 我想要“文件”目录下的所有文件只能通过身份validation的用户访问。

 var basicAuth = require('basic-auth'); var auth = function(req, res, next){ var user = basicAuth(req); if(user && user.name == "admin" && user.pass == "admin") return next(); else{ res.set('WWW-Authenticate', 'Basic realm=Authorization Required'); return res.send(401); } } app.use(function(req, res, next){ if(req.url.indexOf('ftp') != -1){ console.log(req.url); return auth(req, res, next); } else next(); }); app.use(express.static(path.join(__dirname, 'public'))); app.use('/ftp', serveIndex('public/ftp', {'icons': true, 'hidden': true, 'view': 'details'})) 

这是我的代码,对我来说工作正常,你可以试试。

你有没有尝试过以下内容:

app.use('/files/*', auth);

好的,现在我的代码如下所示:

 app.use(function(req, res, next){ if(req.url.indexOf('files') != -1) { return auth(req, res, next); } else { next(); } }); app.use('/files', auth); app.use('/files', express.static(path.join(__dirname, 'files'))); 

但问题仍然存在。 当我尝试访问“文件”时,该中间件似乎被使用,但是如果我尝试访问文件(如/files/somefile.txt),原因是中间件被跳过,并且我没有身份validation访问。