簡體   English   中英

為什么 http-auth 不適用於 express.static 中間件?

[英]Why http-auth does not work with express.static middleware?

我正在嘗試使用http-auth模塊設置一個簡單的身份驗證

我已經創建了這個設置,但它不能正常工作。 提示用戶/密碼的對話框出現,但如果我關閉該對話框,應用程序將繼續工作,也就是說,身份驗證似乎不起作用。

似乎這不起作用,因為我已嘗試將此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 消息而不是您可以添加到/路由的內容(現在您沒有路由處理程序)。

要使其適用於靜態文件,您只需要為靜態文件啟用身份驗證,如下所示:

'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之前聲明並且沒有路由前綴,因為您的靜態文件中間件沒有路由前綴。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM