2016-09-24 42 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