为什么http-auth不能和express.static中间件一起工作?

我正在尝试使用http-auth模块来设置一个简单的身份validation 。

我已经创build了这个设置,但是不能正常工作。 提示用户/密码的对话框显示出来,但如果closures对话框,应用程序将继续工作,也就是说,validation似乎不起作用。

似乎这是行不通的,因为我试图设置这个http-auth工作在我的静态文件夹www

我的app.js是基于这个 。

这是我的设置:

 'use strict'; var express = require('express'); var app = express(); var auth = require('http-auth'); app.use(express.static('www')); var basic = auth.basic({ realm: 'SUPER SECRET STUFF' }, function(username, password, callback) { callback(username == 'username' && password == 'password'); }); app.use("/", auth.connect(basic)); app.set('port', (process.env.PORT || 4000)); app.listen(app.get('port'), function() { console.log('Node app is running on port', app.get('port')); }); 

如果浏览http://localhost:4000/ ,您的示例工作正常,在点击取消之后,您将看到401消息,而不是您可以添加到/ route(现在您没有路由处理程序)的内容。

为了使它适用于静态文件,你只需要启用静态文件的authentication,像这样的事情就可以做到:

 'use strict'; var express = require('express'); var app = express(); var auth = require('http-auth'); var basic = auth.basic({ realm: 'SUPER SECRET STUFF' }, function(username, password, callback) { callback(username == 'username' && password == 'password'); }); app.use(auth.connect(basic)); app.use(express.static('www')); app.set('port', (process.env.PORT || 4000)); app.listen(app.get('port'), function() { console.log('Node app is running on port', app.get('port')); }); 

您可能会注意到,身份validation中间件auth.connect应该在静态文件中间件express.static之前声明,并且没有路由前缀,因为您的静态文件中间件没有路由前缀。