仅通过 Express 框架对某些 URL 使用 HTTP 基本身份验证

2024-03-17

我有一个使用 Express 框架设计的 Node.js 应用程序http 认证 http://http-auth.info模块,如下:

var auth = require('http-auth');
var express = require('express');
// ...
var mywebapp = express();
// ...
if (usebasicauth) {
  var basic = auth.basic({realm:"MyRealm", file:"/srv/config/passwd"});
  mywebapp.use(auth.connect(basic));
}

mywebapp.use('/js', express.static(__dirname + '/files/js'));
mywebapp.use('/css', express.static(__dirname + '/files/css'));
// ...

但是,我不想保护以下可用资产/js and /css目录。这就是我尝试做的:

if (usebasicauth) {
  var basic = auth.basic({realm:"MyRealm", file:"/srv/config/passwd"});
  mywebapp.use(function(req, res, next) {
    if (/^\/(css|js)/.test(req.url)) {
      next();
    }
    else {
      auth.connect(basic);
    }
  });
}

尝试访问下面的 URL/css and /js按预期工作;但是,其他 URL 永远不会加载。

如何使其他 URL 按预期工作?


的顺序mywebapp.use很重要。 如果你有第一个mywebapp.use(auth.connect(basic));然后它将用于每个请求 但如果您更改顺序,它将传递静态数据并仅用于其后面的内容。

中间件函数按照添加的顺序进行处理。

所以下面应该做你想做的。

// no auth for statics
mywebapp.use('/js', express.static(__dirname + '/files/js'));
mywebapp.use('/css', express.static(__dirname + '/files/css'));
// auth reguired from here 
mywebapp.use(auth.connect(basic));

如果你放置mywebapp.use(auth.connect(basic));在express.static之上,它也需要身份验证。

// auth reguired from here 
mywebapp.use(auth.connect(basic));
// auth required for statics as well
mywebapp.use('/js', express.static(__dirname + '/files/js'));
mywebapp.use('/css', express.static(__dirname + '/files/css'));
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

仅通过 Express 框架对某些 URL 使用 HTTP 基本身份验证 的相关文章

随机推荐