【问题标题】:Why http-auth does not work with express.static middleware?为什么 http-auth 不适用于 express.static 中间件?
【发布时间】:2016-09-24 19:49:30
【问题描述】:

我正在尝试使用http-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'));
});

【问题讨论】:

  • 尝试用正确的值替换领域。
  • @bjskistad 我很困惑,什么是正确的值?真的需要吗?我以为我只需要像以前一样设置用户/通行证。

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


【解决方案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 应该在静态文件中间件 express.static 之前声明,并且没有路由前缀,因为您的静态文件中间件没有路由前缀。

【讨论】:

  • 好吧,在这里当我点击取消页面加载完美。以及如何在您的示例中添加默认路由?我的意思是get('/', ...)。我试图在app.use 之后添加get,但现在我输入用户/密码并不断询问我输入用户/密码。因为我想访问http://localhost:4000 并查看www 文件夹中的文件。
  • @OsnyNetto 不确定我是否理解您想要什么...单击取消后您会看到 401 页面(这意味着身份验证不成功)而不是应该带有 200 状态的成功页面,请参阅 @987654321 @了解更多信息
  • @OsnyNetto 你想让/ 路由受密码保护吗?您是否需要对静态文件进行密码保护?
  • 是的,我想保护我的所有静态文件,我设置此身份验证以保护我的应用程序中的所有内容以供公众查看。所以访问localhost:4000我想提示用户/pass,如果错误显示401 Unauthorized,否则显示www文件夹中的静态文件。
  • 我的例子怎么不适合呢?
猜你喜欢
  • 1970-01-01
  • 2016-11-06
  • 1970-01-01
  • 2018-01-16
  • 2017-07-04
  • 2021-05-03
  • 2012-05-15
  • 1970-01-01
  • 2021-04-04
相关资源
最近更新 更多