2016-09-24 58 views
1

我正在尝试使用http-auth模块来设置简单的身份验证。为什么http-auth不支持express.static中间件?

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

看起来这不起作用,因为我试图设置此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')); 
}); 
+0

尝试用正确的值替换领域。 – baranskistad

+0

@bjskistad我很困惑,什么是正确的价值?它真的需要吗?我想我只需要像以前那样设置用户/密码。 –

回答

1

你的榜样工程完美,如果你浏览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前应静态文件中间件声明因为你的静态文件中间件没有路由前缀,所以不需要路由前缀。

+0

那么,在这里,当我点击取消完美的页面加载。以及我如何在您的示例中添加默认路由?我的意思是一个'get('/',...)'。我尝试在'app.use'之后添加get,但是现在我输入用户/密码并不断询问输入用户/密码。因为我想访问'http:// localhost:4000'并查看'www'文件夹中的文件。 –

+0

@OsnyNetto不知道我是否明白你想要什么......点击取消后你会看到401页面(这意味着认证不成功),而不是成功页面,应该有200个状态请参阅https://en.wikipedia.org/wiki/List_of_HTTP_status_codes更多信息 – gevorg

+0

@OsnyNetto你想让'/'路由受密码保护吗?你需要静态文件来保护密码吗? – gevorg