gpt4 book ai didi

javascript - Restify 静态网络服务器在启用 HTTP 基本身份验证后停止工作

转载 作者:行者123 更新时间:2023-12-03 08:04:45 24 4
gpt4 key购买 nike

我有一个工作的node.js Restify 服务器,配置为作为静态网络服务器工作。这是相关代码;

var server = restify.createServer({
name: 'myapp',
version: '1.0.0'
});

var static_webserver = function (app) {
app.get(/.*/, restify.serveStatic({
'directory': 'static', //static html files stored in ../static folder
'default': 'index.html'
}));
} //var static_server = function (app)

static_webserver(server);

在我启用 HTTP 基本身份验证以便为其他 REST API 提供更好的安全性后,静态 Web 服务器停止工作。

这是启用 HTTP 基本身份验证的代码。

server.use(restify.authorizationParser());
function verifyAuthorizedUser(req, res, next)
{
var users;

users = {
foo: {
id: 1,
password: 'bar'
}
};

if (req.username == 'anonymous' || !users[req.username] || req.authorization.basic.password !== users[req.username].password) {
// Respond with { code: 'NotAuthorized', message: '' }
next(new restify.NotAuthorizedError());
} else {
next();
}

next();
}//function verifyAuthorizedUser(req, res, next)

server.use(verifyAuthorizedUser);

似乎启用身份验证后,任何浏览器都无法访问静态html网页,因为需要身份验证。如何禁用静态 Web 服务器的身份验证,但启用其他 REST API 的身份验证?

最佳答案

如果你的nodejs足够最新以支持string.startsWith() :

function verifyAuthorizedUser(req, res, next) {
var path = req.path();
// check if the path starts with /static/
if (path.startsWith('/static/')) {
return next();
}

var users;
users = {
foo: {
id: 1,
password: 'bar'
}
};

if (req.username == 'anonymous' || !users[req.username] || req.authorization.basic.password !== users[req.username].password) {
// Respond with { code: 'NotAuthorized', message: '' }
next(new restify.NotAuthorizedError());
} else {
next();
}

next();
}

如果你没有startsWith(),一个好的旧正则表达式就可以了:

if (path.match(/\/static\/.*/)) {
return next();
}

关于javascript - Restify 静态网络服务器在启用 HTTP 基本身份验证后停止工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34431478/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com