为什么http-auth不能与express.static中间件一起使用?

时间:2016-09-24 19:49:31

标签: javascript node.js authentication express http-auth

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

我已经创建了此设置,但它无法正常工作。提示用户/通行证的对话框显示,但如果我关闭对话框,应用程序将继续工作,也就是说,auth似乎无法正常工作。

似乎无效,因为我已尝试将此http-auth设置为在我的静态文件夹www中工作。

我的app.js基于this one

这是我的设置:

'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'));
});

1 个答案:

答案 0 :(得分:2)

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

要使其适用于静态文件,您只需要为静态文件启用身份验证,这样的事情就可以了:

'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'));
});

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