如何配置express-basic-auth使应用在未提供凭证时返回401状态码?
问题分析与解决方案
嘿,我帮你瞅了下代码,问题出在express-basic-auth的默认配置上!
默认情况下,express-basic-auth的challenge选项是false——这意味着当检测到未授权请求时,它不会主动返回401状态码,而是会跳过这个中间件,让后续的路由继续处理请求。这就是为什么你的根路由会正常返回200的原因。
要解决这个问题,你只需要在配置里加上challenge: true,这样中间件就会在未授权时自动返回带有WWW-Authenticate头的401响应:
const express = require('express') const app = express() const port = 3001 const basicAuth = require('express-basic-auth') // 添加 challenge: true 配置 app.use(basicAuth({ users: { 'admin': 'supersecret' }, challenge: true // 关键配置 })) app.get('/', (req, res) => { res.send('Hello World!') }) app.listen(port, () => { console.log(`Example app listening at http://localhost:${port}`) })
如果之后你需要自定义未授权时的响应内容,还可以通过unauthorizedResponse选项来设置,比如:
app.use(basicAuth({ users: { 'admin': 'supersecret' }, challenge: true, unauthorizedResponse: () => 'Unauthorized access!' }))
内容的提问来源于stack exchange,提问作者Mark
相关产品推荐
相关产品推荐

