首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么http-auth不能与express.static中间件一起工作?

为什么http-auth不能与express.static中间件一起工作?
EN

Stack Overflow用户
提问于 2016-09-25 03:49:31
回答 1查看 866关注 0票数 2

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

我已经创建了这个设置,但是它不能正常工作。提示用户/通行证的对话框出现了,但如果我关闭对话框,应用程序将继续工作,即身份验证似乎不起作用。

这似乎不起作用,因为我已经尝试在我的静态文件夹www中设置这个http-auth

我的app.js是基于this one的。

下面是我的设置:

代码语言:javascript
复制
'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'));
});
EN

回答 1

Stack Overflow用户

发布于 2016-09-26 04:35:08

如果您浏览http://localhost:4000/,您的示例工作得很好,在点击cancel之后,您看到的是401消息,而不是您可以添加到/路由的内容(现在您没有它的路由处理程序)。

要让它对静态文件起作用,你只需要为静态文件启用身份验证,下面这样就可以了:

代码语言:javascript
复制
'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之前声明,并且没有路由前缀,因为您的静态文件中间件没有路由前缀。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39680330

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档