仅使用Express框架对某些URL使用HTTP基本身份validation
我有一个使用Express框架和http-auth模块devise的node.js应用程序,如下所示:
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
和/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); } }); }
尝试访问/css
和/js
下的URL /js
预期工作; 但是,其他URL永远不会加载。
我如何使其他url按预期工作?
mywebapp.use
的顺序很重要。 如果你有第一个mywebapp.use(auth.connect(basic));
那么它将被用于每一个请求,但是如果你改变顺序它将通过静态并且仅被用于之后的任何事情。
中间件function按照添加的顺序进行处理。
所以下面应该做你想要的。
// 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'));
你可以做这样的事情以及https://gist.github.com/gevorg/7168d5f02c1ca5362b2a#file-specific-path-js
// Express module. var express = require('express'); // Authentication module. var auth = require('http-auth'); var basic = auth.basic({ realm: "Simon Area.", file: __dirname + "/../data/users.htpasswd" // gevorg:gpass, Sarah:testpass ... }); // Application setup. var app = express(); app.use(function(req, res, next) { if ('/specific/path' === req.path) { next(); } else { (auth.connect(basic))(req, res, next); } }); // Setup route. app.get('/', function(req, res){ res.send("Hello from express - " + req.user + "!"); }); // Setup guest route. app.get('/specific/path', function(req, res){ res.send("Hello from express - guest!"); }); // Start server. app.listen(1337);
- 如何使用multer-gridfs-storage,express,mongodb在用户configuration文件中添加图像path
- 如何从url加载图像到nodejs的缓冲区
- 无法在nodeJS中validation用户:TypeError:无法使用“in”运算符在fs中search“用户名”
- 缺less必要的参数:redirect_uri与passport-google-oauth
- SQLite3是否已经在Node.js中准备了语句?
- 来自node.js的MongoDB查询(express-coffeescript-mongodb)
- node.js express.js对象不是函数call_non_function
- 如何在同一个端口上使用ExpressJS和Socket.io?
- express.favicon()是做什么的