如何让express-basic-auth提示弹出用户和密码?

jdo*_*dog 5 basic-authentication node.js express

我有一个node.js应用程序,当basicAuth是节点模块时,它曾经工作过.下面的代码会在访问app时弹出密码和用户名提示.

// start the UI
var app = express();
app.use(express.basicAuth('me', 'openforme'));
app.use(kue.app);
app.listen(3001);
Run Code Online (Sandbox Code Playgroud)

现在,basicAuth作为模块从节点中删除,我使用的是express-basic-auth.当使用下面的代码时,我得到401未经授权的错误,因为它没有像basicAuth那样给我一个用户名和密码弹出提示?

// start the UI
var app = express();
var basicAuth = require('express-basic-auth');
app.use(basicAuth({
    users: { 'me': 'openforme' }
}));
app.use(kue.app);
app.listen(3001);
Run Code Online (Sandbox Code Playgroud)

小智 12

现在有一个开箱即用的选项express-basic-auth.该挑战赛财产.

app.use(basicAuth({
    challenge: true,
    users: { 'me': 'openforme' }
}));
Run Code Online (Sandbox Code Playgroud)

  • 对我有用,非常感谢!我想知道为什么官方文件没有提到这一点。 (2认同)

Kie*_*n E 5

我知道这对聚会来说已经很晚了,但是可以通过使用basic-auth如下方式来实现您想要的行为:

const express = require('express')
const auth = require('basic-auth')
const app = express()

// Ensure this is before any other middleware or routes
app.use((req, res, next) => {
  let user = auth(req)

  if (user === undefined || user['name'] !== 'USERNAME' || user['pass'] !== 'PASSWORD') {
    res.statusCode = 401
    res.setHeader('WWW-Authenticate', 'Basic realm="Node"')
    res.end('Unauthorized')
  } else {
    next()
  }
})
Run Code Online (Sandbox Code Playgroud)