是否有方法从node.js express basicAuth处理程序返回5XX错误?
My express应用程序使用以下基本身份验证功能:是否有方法从node.js express basicAuth处理程序返回5XX错误?,node.js,express,Node.js,Express,My express应用程序使用以下基本身份验证功能: exports.basicAuth = express.basicAuth(function (user, pass, callback) { findUserByEmail(user, function (err, account) { var isPasswordMatch = false;
exports.basicAuth = express.basicAuth(function (user, pass, callback) {
findUserByEmail(user, function (err, account) {
var isPasswordMatch = false;
log.info("Authenticate request user-pass: " + user + ":" + pass);
if (err) {
log.info("Error occurred when authenticate user: " + err);
}
if (account == null || account == undefined) {
log.info("Account not found");
} else {
if (!isActive(account)) {
log.info("Account is not active");
}
if (account.password != encryptPassword(account.salt, pass)) {
log.info("Wrong pass");
isPasswordMatch = false;
} else {
isPasswordMatch = true;
}
}
var authenticated = err == null && account != null && account != undefined && isActive(account) && isPasswordMatch;
callback(null, authenticated);
});
});
有时,当服务器过载时,
findUserByEmail
请求将失败。在这种情况下,上述函数会导致服务器返回401错误。相反,我希望返回一个5XX错误代码,以便客户机知道服务器有问题,而不一定是他们传递的凭据有问题。导致FindUserByMail中出现错误的最佳方法是返回5XX错误代码而不是401?我找到了一个解决方案。我只是将身份验证处理程序包装在一个标准的请求处理程序中,并在出现问题时发送一个错误响应
exports.basicAuth = function(req, res, next) {
express.basicAuth(function (user, pass, callback) {
findUserByEmail(user, function (err, account) {
var isPasswordMatch = false;
log.info("Authenticate request user-pass: " + user + ":" + pass);
if (err) {
log.info("Error occurred when authenticate user");
res.send(500, { error: 'Unable to authenticate request' });
return;
}
...
});
})(req, res, next);
};
我对express不太熟悉,无法提供实际答案,但我认为如果您将实际错误作为第一个参数传递给
回调
则可能会得到您想要的结果。不,仍然返回401。您可以尝试在代码中抛出错误。如果您有错误处理中间件,它将捕获它,您可以在其中抛出500。